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: 1353828:1380242 (outdated) -->
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
45 <highlight language="config">
47 <VirtualHost *:443>
48 ServerName www.example.com
50 SSLCertificateFile /path/to/www.example.com.cert
51 SSLCertificateKeyFile /path/to/www.example.com.key
57 <section id="ciphersuites">
58 <title>Suites de chiffrement et mise en application de la sécurité
59 de haut niveau</title>
61 <li><a href="#onlystrong">Comment créer un serveur SSL
62 qui n'accepte que le chiffrement fort ?</a></li>
63 <li><a href="#strongurl">Comment créer un serveur qui accepte tous les types de
64 chiffrement en général, mais exige un chiffrement fort pour pouvoir
65 accéder à une URL particulière ?</a></li>
69 <section id="onlystrong">
70 <title>Comment créer un serveur SSL qui n'accepte
71 que le chiffrement fort ?</title>
72 <p>Les directives suivantes ne permettent que les
73 chiffrements de plus haut niveau :</p>
74 <highlight language="config">
75 SSLCipherSuite HIGH:!aNULL:!MD5
80 <p>Avec la configuration qui suit, vous indiquez une préférence pour
81 des algorityhmes de chiffrement spécifiques optimisés en matière de
82 rapidité (le choix final sera opéré par mod_ssl, dans la mesure ou le
83 client les supporte) :</p>
85 <highlight language="config">
86 SSLCipherSuite RC4-SHA:AES128-SHA:HIGH:!aNULL:!MD5
87 SSLHonorCipherOrder on
91 <section id="strongurl">
92 <title>Comment créer un serveur qui accepte tous les types de
93 chiffrement en général, mais exige un chiffrement fort pour pouvoir
94 accéder à une URL particulière ?</title>
95 <p>Dans ce cas bien évidemment, une directive <directive
96 module="mod_ssl">SSLCipherSuite</directive> au niveau du serveur principal
97 qui restreint le choix des suites de chiffrement aux versions les plus
98 fortes ne conviendra pas. <module>mod_ssl</module> peut cependant être
99 reconfiguré au sein de blocs <code>Location</code> qui permettent
100 d'adapter la configuration générale à un répertoire spécifique ;
101 <module>mod_ssl</module> peut alors forcer automatiquement une
102 renégociation des paramètres SSL pour parvenir au but recherché.
103 Cette configuration peut se présenter comme suit :</p>
104 <highlight language="config">
105 # soyons très tolérant a priori
106 SSLCipherSuite ALL:!aNULL:RC4+RSA:+HIGH:+MEDIUM:+LOW:+EXP:+eNULL
108 <Location /strong/area>
109 # sauf pour https://hostname/strong/area/ et ses sous-répertoires
110 # qui exigent des chiffrements forts
111 SSLCipherSuite HIGH:!aNULL:!MD5
115 <!-- /ciphersuites -->
117 <section id="accesscontrol">
118 <title>Authentification du client et contrôle d'accès</title>
120 <li><a href="#allclients">Comment forcer les clients
121 à s'authentifier à l'aide de certificats ?</a></li>
122 <li><a href="#arbitraryclients">Comment forcer les clients
123 à s'authentifier à l'aide de certificats pour une URL particulière,
124 mais autoriser quand-même tout client anonyme
125 à accéder au reste du serveur ?</a></li>
126 <li><a href="#certauthenticate">Comment n'autoriser l'accès à une URL
127 particulière qu'aux clients qui possèdent des certificats, mais autoriser
128 l'accès au reste du serveur à tous les clients ?</a></li>
129 <li><a href="#intranet">Comment imposer HTTPS avec chiffrements forts,
130 et soit authentification de base, soit possession de certificats clients,
131 pour l'accès à une partie de l'Intranet, pour les clients en
132 provenance de l'Internet ?</a></li>
135 <section id="allclients">
136 <title>Comment forcer les clients
137 à s'authentifier à l'aide de certificats ?
140 <p>Lorsque vous connaissez tous vos clients (comme c'est en général le cas
141 au sein d'un intranet d'entreprise), vous pouvez imposer une
142 authentification basée uniquement sur les certificats. Tout ce dont vous
143 avez besoin pour y parvenir est de créer des certificats clients signés par
144 le certificat de votre propre autorité de certification
145 (<code>ca.crt</code>), et d'authentifier les clients à l'aide de ces
147 <highlight language="config">
148 # exige un certificat client signé par le certificat de votre CA
149 # contenu dans ca.crt
150 SSLVerifyClient require
152 SSLCACertificateFile conf/ssl.crt/ca.crt
156 <section id="arbitraryclients">
157 <title>Comment forcer les clients
158 à s'authentifier à l'aide de certificats pour une URL particulière,
159 mais autoriser quand-même tout client anonyme
160 à accéder au reste du serveur ?</title>
162 <p>Pour forcer les clients à s'authentifier à l'aide de certificats pour une
163 URL particulière, vous pouvez utiliser les fonctionnalités de reconfiguration
164 de <module>mod_ssl</module> en fonction du répertoire :</p>
166 <highlight language="config">
168 SSLCACertificateFile conf/ssl.crt/ca.crt
170 <Location /secure/area>
171 SSLVerifyClient require
177 <section id="certauthenticate">
178 <title>Comment n'autoriser l'accès à une URL
179 particulière qu'aux clients qui possèdent des certificats, mais autoriser
180 l'accès au reste du serveur à tous les clients ?</title>
182 <p>La clé du problème consiste à vérifier si une partie du certificat
183 client correspond à ce que vous attendez. Cela signifie en général
184 consulter tout ou partie du nom distinctif (DN), afin de vérifier s'il
185 contient une chaîne connue. Il existe deux méthodes pour y parvenir ;
186 on utilise soit le module <module>mod_auth_basic</module>, soit la
187 directive <directive module="mod_ssl">SSLRequire</directive>.</p>
189 <p>La méthode du module <module>mod_auth_basic</module> est en général
190 incontournable lorsque les certificats ont un contenu arbitraire, ou
191 lorsque leur DN ne contient aucun champ connu
192 (comme l'organisation, etc...). Dans ce cas, vous devez construire une base
193 de données de mots de passe contenant <em>tous</em> les clients
194 autorisés, comme suit :</p>
196 <highlight language="config">
198 SSLCACertificateFile conf/ssl.crt/ca.crt
199 SSLCACertificatePath conf/ssl.crt
201 <Directory /usr/local/apache2/htdocs/secure/area>
202 SSLVerifyClient require
204 SSLOptions +FakeBasicAuth
206 AuthName "Snake Oil Authentication"
208 AuthBasicProvider file
209 AuthUserFile /usr/local/apache2/conf/httpd.passwd
215 <p>Le mot de passe utilisé dans cet exemple correspond à la chaîne de
216 caractères "password" chiffrée en DES. Voir la documentation de la
217 directive <directive module="mod_ssl">SSLOptions</directive> pour
218 plus de détails.</p>
220 <example><title>httpd.passwd</title><pre>
221 /C=DE/L=Munich/O=Snake Oil, Ltd./OU=Staff/CN=Foo:xxj31ZMTZzkVA
222 /C=US/L=S.F./O=Snake Oil, Ltd./OU=CA/CN=Bar:xxj31ZMTZzkVA
223 /C=US/L=L.A./O=Snake Oil, Ltd./OU=Dev/CN=Quux:xxj31ZMTZzkVA</pre>
226 <p>Lorsque vos clients font tous partie d'une même hiérarchie, ce qui
227 apparaît dans le DN, vous pouvez les authentifier plus facilement en
228 utilisant la directive <directive module="mod_ssl"
229 >SSLRequire</directive>, comme suit :</p>
232 <highlight language="config">
234 SSLCACertificateFile conf/ssl.crt/ca.crt
235 SSLCACertificatePath conf/ssl.crt
237 <Directory /usr/local/apache2/htdocs/secure/area>
238 SSLVerifyClient require
240 SSLOptions +FakeBasicAuth
242 SSLRequire %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." \
243 and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"}
248 <section id="intranet">
249 <title>Comment imposer HTTPS avec chiffrements forts,
250 et soit authentification de base, soit possession de certificats clients,
251 pour l'accès à une partie de l'Intranet, pour les clients en
252 provenance de l'Internet ? Je souhaite quand-même autoriser l'accès en HTTP
253 aux clients de l'intranet.</title>
255 <p>On suppose dans ces exemples que les clients de l'intranet ont des
256 adresses IP dans la gamme 192.168.1.0/24, et que la partie de l'intranet
257 à laquelle vous voulez autoriser l'accès depuis l'Internet est
258 <code>/usr/local/apache2/htdocs/subarea</code>. Ces lignes de configuration
259 doivent se trouver en dehors de votre hôte virtuel HTTPS, afin qu'elles
260 s'appliquent à la fois à HTTP et HTTPS.</p>
262 <highlight language="config">
263 SSLCACertificateFile conf/ssl.crt/company-ca.crt
265 <Directory /usr/local/apache2/htdocs>
266 # En dehors de subarea, seul l'accès depuis l'intranet est
270 Allow from 192.168.1.0/24
273 <Directory /usr/local/apache2/htdocs/subarea>
274 # Dans subarea, tout accès depuis l'intranet est autorisé
275 # mais depuis l'Internet, seul l'accès par HTTPS + chiffrement fort + Mot de passe
276 # ou HTTPS + chiffrement fort + certificat client n'est autorisé.
278 # Si HTTPS est utilisé, on s'assure que le niveau de chiffrement est fort.
279 # Autorise en plus les certificats clients comme une alternative à
280 # l'authentification basique.
281 SSLVerifyClient optional
283 SSLOptions +FakeBasicAuth +StrictRequire
284 SSLRequire %{SSL_CIPHER_USEKEYSIZE} >= 128
286 # ON oblige les clients venant d'Internet à utiliser HTTPS
288 RewriteCond %{REMOTE_ADDR} !^192\.168\.1\.[0-9]+$
289 RewriteCond %{HTTPS} !=on
292 # On permet l'accès soit sur les critères réseaux, soit par authentification Basique
295 # Contrôle d'accès réseau
300 # Configuration de l'authentification HTTP Basique
302 AuthName "Protected Intranet Area"
303 AuthBasicProvider file
304 AuthUserFile conf/protected.passwd
310 <!-- /access control -->
312 <section id="logging">
313 <title>Journalisation</title>
315 <p><module>mod_ssl</module> peut enregistrer des informations de
316 débogage très verbeuses dans le journal des erreurs, lorsque sa
317 directive <directive module="core">LogLevel</directive> est définie
318 à des niveaux de trace élevés. Par contre, sur un serveur très
319 sollicité, le niveau <code>info</code> sera probablement déjà trop
320 élevé. Souvenez-vous que vous pouvez configurer la directive
321 <directive module="core">LogLevel</directive> par module afin de
322 pourvoir à vos besoins.</p>