1 <?xml version="1.0" encoding="ISO-8859-1" ?>
2 <!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
3 <?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
4 <!-- English revision : 1070919 -->
5 <!-- French translation : Lucien GENTIS -->
6 <!-- Reviewed by : Vincent Deffontaines -->
9 Licensed to the Apache Software Foundation (ASF) under one or more
10 contributor license agreements. See the NOTICE file distributed with
11 this work for additional information regarding copyright ownership.
12 The ASF licenses this file to You under the Apache License, Version 2.0
13 (the "License"); you may not use this file except in compliance with
14 the License. You may obtain a copy of the License at
16 http://www.apache.org/licenses/LICENSE-2.0
18 Unless required by applicable law or agreed to in writing, software
19 distributed under the License is distributed on an "AS IS" BASIS,
20 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21 See the License for the specific language governing permissions and
22 limitations under the License.
25 <manualpage metafile="ssl_howto.xml.meta">
26 <parentdocument href="./">SSL/TLS</parentdocument>
28 <title>Chiffrement fort SSL/TLS : Mode d'emploi</title>
32 <p>Ce document doit vous permettre de démarrer et de faire fonctionner
33 une configuration de base. Avant de vous lancer dans l'application de
34 techniques avancées, il est fortement recommandé de lire le reste
35 de la documentation SSL afin d'en comprendre le fonctionnement de
36 manière plus approfondie.</p>
39 <section id="configexample">
40 <title>Exemple de configuration basique</title>
42 <p>Votre configuration SSL doit comporter au moins les directives
47 <VirtualHost *:443><br />
49 ServerName www.example.com<br />
51 SSLCertificateFile /chemin/vers/www.example.com.cert<br />
52 SSLCertificateKeyFile /chemin/vers/www.example.com.key<br />
59 <section id="ciphersuites">
60 <title>Suites de chiffrement et mise en application de la sécurité
61 de haut niveau</title>
63 <li><a href="#onlystrong">Comment créer un serveur SSL
64 qui n'accepte que le chiffrement fort ?</a></li>
65 <li><a href="#strongurl">Comment créer un serveur qui accepte tous les types de
66 chiffrement en général, mais exige un chiffrement fort pour pouvoir
67 accéder à une URL particulière ?</a></li>
71 <section id="onlystrong">
72 <title>Comment créer un serveur SSL qui n'accepte
73 que le chiffrement fort ?</title>
74 <p>Les directives suivantes ne permettent que les
75 chiffrements de plus haut niveau :</p>
76 <example><title>httpd.conf</title>
77 SSLProtocol all -SSLv2<br />
78 SSLCipherSuite HIGH:!ADH:!EXP:!MD5:!NULL<br />
83 <p>Avec la configuration qui suit, vous pouvez activer deux méthodes de chiffrement relativement sécurisées, et rapides :</p>
85 <example><title>httpd.conf</title>
86 SSLProtocol all -SSLv2<br />
87 SSLCipherSuite RC4-SHA:AES128-SHA:HIGH:!ADH:!EXP:!MD5:!NULL<br />
88 SSLHonorCipherOrder on
91 <p>Ceci correspond largement à la valeur par défaut de la directive <directive module="mod_ssl">SSLCipherSuite</directive>,
92 et représente la pratique à conseiller.</p>
95 <section id="strongurl">
96 <title>Comment créer un serveur qui accepte tous les types de
97 chiffrement en général, mais exige un chiffrement fort pour pouvoir
98 accéder à une URL particulière ?</title>
99 <p>Dans ce cas bien évidemment, une directive <directive
100 module="mod_ssl">SSLCipherSuite</directive> au niveau du serveur principal
101 qui restreint le choix des suites de chiffrement aux versions les plus
102 fortes ne conviendra pas. <module>mod_ssl</module> peut cependant être
103 reconfiguré au sein de blocs <code>Location</code> qui permettent
104 d'adapter la configuration générale à un répertoire spécifique ;
105 <module>mod_ssl</module> peut alors forcer automatiquement une
106 renégociation des paramètres SSL pour parvenir au but recherché.
107 Cette configuration peut se présenter comme suit :</p>
109 # soyons très tolérant a priori<br />
110 SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL<br />
112 <Location /strong/area><br />
113 # sauf pour https://hostname/strong/area/ et ses sous-répertoires<br />
114 # qui exigent des chiffrements forts<br />
115 SSLCipherSuite HIGH:!ADH:!EXP:!MD5:!NULL<br />
119 <!-- /ciphersuites -->
121 <section id="accesscontrol">
122 <title>Authentification du client et contrôle d'accès</title>
124 <li><a href="#allclients">Comment forcer les clients
125 à s'authentifier à l'aide de certificats ?</a></li>
126 <li><a href="#arbitraryclients">Comment forcer les clients
127 à s'authentifier à l'aide de certificats pour une URL particulière,
128 mais autoriser quand-même tout client anonyme
129 à accéder au reste du serveur ?</a></li>
130 <li><a href="#certauthenticate">Comment n'autoriser l'accès à une URL
131 particulière qu'aux clients qui possèdent des certificats, mais autoriser
132 l'accès au reste du serveur à tous les clients ?</a></li>
133 <li><a href="#intranet">Comment imposer HTTPS avec chiffrements forts,
134 et soit authentification de base, soit possession de certificats clients,
135 pour l'accès à une partie de l'Intranet, pour les clients en
136 provenance de l'Internet ?</a></li>
139 <section id="allclients">
140 <title>Comment forcer les clients
141 à s'authentifier à l'aide de certificats ?
144 <p>Lorsque vous connaissez tous vos clients (comme c'est en général le cas
145 au sein d'un intranet d'entreprise), vous pouvez imposer une
146 authentification basée uniquement sur les certificats. Tout ce dont vous
147 avez besoin pour y parvenir est de créer des certificats clients signés par
148 le certificat de votre propre autorité de certification
149 (<code>ca.crt</code>), et d'authentifier les clients à l'aide de ces
151 <example><title>httpd.conf</title>
152 # exige un certificat client signé par le certificat de votre CA<br />
153 # contenu dans ca.crt<br />
154 SSLVerifyClient require<br />
155 SSLVerifyDepth 1<br />
156 SSLCACertificateFile conf/ssl.crt/ca.crt
160 <section id="arbitraryclients">
161 <title>Comment forcer les clients
162 à s'authentifier à l'aide de certificats pour une URL particulière,
163 mais autoriser quand-même tout client anonyme
164 à accéder au reste du serveur ?</title>
166 <p>Pour forcer les clients à s'authentifier à l'aide de certificats pour une
167 URL particulière, vous pouvez utiliser les fonctionnalités de reconfiguration
168 de <module>mod_ssl</module> en fonction du répertoire :</p>
170 <example><title>httpd.conf</title>
171 SSLVerifyClient none<br />
172 SSLCACertificateFile conf/ssl.crt/ca.crt<br />
174 <Location /secure/area><br />
175 SSLVerifyClient require<br />
176 SSLVerifyDepth 1<br />
177 </Location><br />
181 <section id="certauthenticate">
182 <title>Comment n'autoriser l'accès à une URL
183 particulière qu'aux clients qui possèdent des certificats, mais autoriser
184 l'accès au reste du serveur à tous les clients ?</title>
186 <p>La clé du problème consiste à vérifier si une partie du certificat
187 client correspond à ce que vous attendez. Cela signifie en général
188 consulter tout ou partie du nom distinctif (DN), afin de vérifier s'il
189 contient une chaîne connue. Il existe deux méthodes pour y parvenir ;
190 on utilise soit le module <module>mod_auth_basic</module>, soit la
191 directive <directive module="mod_ssl">SSLRequire</directive>.</p>
193 <p>La méthode du module <module>mod_auth_basic</module> est en général
194 incontournable lorsque les certificats ont un contenu arbitraire, ou
195 lorsque leur DN ne contient aucun champ connu
196 (comme l'organisation, etc...). Dans ce cas, vous devez construire une base
197 de données de mots de passe contenant <em>tous</em> les clients
198 autorisés, comme suit :</p>
200 <example><title>httpd.conf</title><pre>
202 <Directory /usr/local/apache2/htdocs/secure/area>
204 SSLVerifyClient require
206 SSLCACertificateFile conf/ssl.crt/ca.crt
207 SSLCACertificatePath conf/ssl.crt
208 SSLOptions +FakeBasicAuth
210 AuthName "Snake Oil Authentication"
212 AuthBasicProvider file
213 AuthUserFile /usr/local/apache2/conf/httpd.passwd
215 </Directory></pre>
218 <p>Le mot de passe utilisé dans cet exemple correspond à la chaîne de
219 caractères "password" chiffrée en DES. Voir la documentation de la
220 directive <directive module="mod_ssl">SSLOptions</directive> pour
221 plus de détails.</p>
223 <example><title>httpd.passwd</title><pre>
224 /C=DE/L=Munich/O=Snake Oil, Ltd./OU=Staff/CN=Foo:xxj31ZMTZzkVA
225 /C=US/L=S.F./O=Snake Oil, Ltd./OU=CA/CN=Bar:xxj31ZMTZzkVA
226 /C=US/L=L.A./O=Snake Oil, Ltd./OU=Dev/CN=Quux:xxj31ZMTZzkVA</pre>
229 <p>Lorsque vos clients font tous partie d'une même hiérarchie, ce qui
230 apparaît dans le DN, vous pouvez les authentifier plus facilement en
231 utilisant la directive <directive module="mod_ssl"
232 >SSLRequire</directive>, comme suit :</p>
235 <example><title>httpd.conf</title><pre>
237 <Directory /usr/local/apache2/htdocs/secure/area>
239 SSLVerifyClient require
241 SSLCACertificateFile conf/ssl.crt/ca.crt
242 SSLCACertificatePath conf/ssl.crt
243 SSLOptions +FakeBasicAuth
245 SSLRequire %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." \
246 and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"}
247 </Directory></pre>
251 <section id="intranet">
252 <title>Comment imposer HTTPS avec chiffrements forts,
253 et soit authentification de base, soit possession de certificats clients,
254 pour l'accès à une partie de l'Intranet, pour les clients en
255 provenance de l'Internet ? Je souhaite quand-même autoriser l'accès en HTTP
256 aux clients de l'intranet.</title>
258 <p>On suppose dans ces exemples que les clients de l'intranet ont des
259 adresses IP dans la gamme 192.168.1.0/24, et que la partie de l'intranet
260 à laquelle vous voulez autoriser l'accès depuis l'Internet est
261 <code>/usr/local/apache2/htdocs/subarea</code>. Ces lignes de configuration
262 doivent se trouver en dehors de votre hôte virtuel HTTPS, afin qu'elles
263 s'appliquent à la fois à HTTP et HTTPS.</p>
265 <example><title>httpd.conf</title><pre>
266 SSLCACertificateFile conf/ssl.crt/company-ca.crt
268 <Directory /usr/local/apache2/htdocs>
269 # En dehors de subarea, seul l'accès depuis l'intranet est autorisé
272 Allow from 192.168.1.0/24
275 <Directory /usr/local/apache2/htdocs/subarea>
276 # Dans subarea, tout accès depuis l'intranet est autorisé
277 # mais depuis l'Internet, seul l'accès par HTTPS + chiffrement fort
279 # ou HTTPS + chiffrement fort + certificat client n'est autorisé.
281 # Si HTTPS est utilisé, on s'assure que le niveau de chiffrement est fort.
282 # Autorise en plus les certificats clients comme une alternative à
283 # l'authentification basique.
284 SSLVerifyClient optional
286 SSLOptions +FakeBasicAuth +StrictRequire
287 SSLRequire %{SSL_CIPHER_USEKEYSIZE} >= 128
289 # ON oblige les clients venant d'Internet à utiliser HTTPS
291 RewriteCond %{REMOTE_ADDR} !^192\.168\.1\.[0-9]+$
292 RewriteCond %{HTTPS} !=on
295 # On permet l'accès soit sur les critères réseaux, soit par authentification Basique
298 # Contrôle d'accès réseau
303 # Configuration de l'authentification HTTP Basique
305 AuthName "Protected Intranet Area"
306 AuthBasicProvider file
307 AuthUserFile conf/protected.passwd
309 </Directory></pre>
313 <!-- /access control -->
315 <section id="logging">
316 <title>Journalisation</title>
318 <p><module>mod_ssl</module> peut enregistrer des informations de
319 débogage très verbeuses dans le journal des erreurs, lorsque sa
320 directive <directive module="core">LogLevel</directive> est définie
321 à des niveaux de trace élevés. Par contre, sur un serveur très
322 sollicité, le niveau <code>info</code> sera probablement déjà trop
323 élevé. Souvenez-vous que vous pouvez configurer la directive
324 <directive module="core">LogLevel</directive> par module afin de
325 pourvoir à vos besoins.</p>