]> granicus.if.org Git - apache/blob - docs/manual/ssl/ssl_howto.xml.fr
xforms
[apache] / docs / manual / ssl / ssl_howto.xml.fr
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 -->
7
8 <!--
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
15
16      http://www.apache.org/licenses/LICENSE-2.0
17
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.
23 -->
24
25 <manualpage metafile="ssl_howto.xml.meta">
26 <parentdocument href="./">SSL/TLS</parentdocument>
27
28   <title>Chiffrement fort SSL/TLS : Mode d'emploi</title>
29
30 <summary>
31
32 <p>Ce document doit vous permettre de d&eacute;marrer et de faire fonctionner
33 une configuration de base. Avant de vous lancer dans l'application de
34 techniques avanc&eacute;es, il est fortement recommand&eacute; de lire le reste
35 de la documentation SSL afin d'en comprendre le fonctionnement de
36 mani&egrave;re plus approfondie.</p>
37 </summary>
38
39 <section id="configexample">
40 <title>Exemple de configuration basique</title>
41
42 <p>Votre configuration SSL doit comporter au moins les directives
43 suivantes :</p>
44
45 <highlight language="config">
46 Listen 443
47 &lt;VirtualHost *:443&gt;
48     ServerName www.example.com
49     SSLEngine on
50     SSLCertificateFile /path/to/www.example.com.cert
51     SSLCertificateKeyFile /path/to/www.example.com.key
52 &lt;/VirtualHost&gt;
53 </highlight>
54
55 </section>
56
57 <section id="ciphersuites">
58 <title>Suites de chiffrement et mise en application de la s&eacute;curit&eacute;
59 de haut niveau</title>
60 <ul>
61 <li><a href="#onlystrong">Comment cr&eacute;er un serveur SSL
62 qui n'accepte que le chiffrement fort ?</a></li>
63 <li><a href="#strongurl">Comment cr&eacute;er un serveur qui accepte tous les types de
64 chiffrement en g&eacute;n&eacute;ral, mais exige un chiffrement fort pour pouvoir
65 acc&eacute;der &agrave; une URL particuli&egrave;re ?</a></li>
66 </ul>
67
68
69 <section id="onlystrong">
70 <title>Comment cr&eacute;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
76     </highlight>
77 </section>
78
79
80  <p>Avec la configuration qui suit, vous indiquez une pr&eacute;f&eacute;rence pour
81  des algorityhmes de chiffrement sp&eacute;cifiques optimis&eacute;s en mati&egrave;re de
82  rapidit&eacute; (le choix final sera op&eacute;r&eacute; par mod_ssl, dans la mesure ou le
83  client les supporte) :</p>
84
85     <highlight language="config">
86 SSLCipherSuite RC4-SHA:AES128-SHA:HIGH:!aNULL:!MD5
87 SSLHonorCipherOrder on
88     </highlight>
89 </section>
90
91 <section id="strongurl">
92 <title>Comment cr&eacute;er un serveur qui accepte tous les types de
93 chiffrement en g&eacute;n&eacute;ral, mais exige un chiffrement fort pour pouvoir
94 acc&eacute;der &agrave; une URL particuli&egrave;re ?</title>
95     <p>Dans ce cas bien &eacute;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 &ecirc;tre
99     reconfigur&eacute; au sein de blocs <code>Location</code> qui permettent
100     d'adapter la configuration g&eacute;n&eacute;rale &agrave; un r&eacute;pertoire sp&eacute;cifique ;
101     <module>mod_ssl</module> peut alors forcer automatiquement une
102     ren&eacute;gociation des param&egrave;tres SSL pour parvenir au but recherch&eacute;.
103     Cette configuration peut se pr&eacute;senter comme suit :</p>
104     <highlight language="config">
105 # soyons tr&egrave;s tol&eacute;rant a priori
106 SSLCipherSuite ALL:!aNULL:RC4+RSA:+HIGH:+MEDIUM:+LOW:+EXP:+eNULL
107
108 &lt;Location /strong/area&gt;
109 # sauf pour https://hostname/strong/area/ et ses sous-r&eacute;pertoires
110 # qui exigent des chiffrements forts
111 SSLCipherSuite HIGH:!aNULL:!MD5
112 &lt;/Location&gt;
113     </highlight>
114 </section>
115 <!-- /ciphersuites -->
116
117 <section id="accesscontrol">
118 <title>Authentification du client et contr&ocirc;le d'acc&egrave;s</title>
119 <ul>
120 <li><a href="#allclients">Comment forcer les clients
121 &agrave; s'authentifier &agrave; l'aide de certificats ?</a></li>
122 <li><a href="#arbitraryclients">Comment forcer les clients
123 &agrave; s'authentifier &agrave; l'aide de certificats pour une URL particuli&egrave;re,
124 mais autoriser quand-m&ecirc;me tout client anonyme
125 &agrave; acc&eacute;der au reste du serveur ?</a></li>
126 <li><a href="#certauthenticate">Comment n'autoriser l'acc&egrave;s &agrave; une URL
127 particuli&egrave;re qu'aux clients qui poss&egrave;dent des certificats, mais autoriser
128 l'acc&egrave;s au reste du serveur &agrave; 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&egrave;s &agrave; une partie de l'Intranet, pour les clients en
132 provenance de l'Internet ?</a></li>
133 </ul>
134
135 <section id="allclients">
136 <title>Comment forcer les clients
137 &agrave; s'authentifier &agrave; l'aide de certificats ?
138 </title>
139
140     <p>Lorsque vous connaissez tous vos clients (comme c'est en g&eacute;n&eacute;ral le cas
141     au sein d'un intranet d'entreprise), vous pouvez imposer une
142     authentification bas&eacute;e uniquement sur les certificats. Tout ce dont vous
143     avez besoin pour y parvenir est de cr&eacute;er des certificats clients sign&eacute;s par
144     le certificat de votre propre autorit&eacute; de certification
145     (<code>ca.crt</code>), et d'authentifier les clients &agrave; l'aide de ces
146     certificats.</p>
147     <highlight language="config">
148 # exige un certificat client sign&eacute; par le certificat de votre CA
149 # contenu dans ca.crt
150 SSLVerifyClient require
151 SSLVerifyDepth 1
152 SSLCACertificateFile conf/ssl.crt/ca.crt
153     </highlight>
154 </section>
155
156 <section id="arbitraryclients">
157 <title>Comment forcer les clients
158 &agrave; s'authentifier &agrave; l'aide de certificats pour une URL particuli&egrave;re,
159 mais autoriser quand-m&ecirc;me tout client anonyme
160 &agrave; acc&eacute;der au reste du serveur ?</title>
161
162 <p>Pour forcer les clients &agrave; s'authentifier &agrave; l'aide de certificats pour une
163 URL particuli&egrave;re, vous pouvez utiliser les fonctionnalit&eacute;s de reconfiguration
164 de <module>mod_ssl</module> en fonction du r&eacute;pertoire :</p>
165
166     <highlight language="config">
167 SSLVerifyClient none
168 SSLCACertificateFile conf/ssl.crt/ca.crt
169
170 &lt;Location /secure/area&gt;
171 SSLVerifyClient require
172 SSLVerifyDepth 1
173 &lt;/Location&gt;
174     </highlight>
175 </section>
176
177 <section id="certauthenticate">
178 <title>Comment n'autoriser l'acc&egrave;s &agrave; une URL
179 particuli&egrave;re qu'aux clients qui poss&egrave;dent des certificats, mais autoriser
180 l'acc&egrave;s au reste du serveur &agrave; tous les clients ?</title>
181
182     <p>La cl&eacute; du probl&egrave;me consiste &agrave; v&eacute;rifier si une partie du certificat
183     client correspond &agrave; ce que vous attendez. Cela signifie en g&eacute;n&eacute;ral
184     consulter tout ou partie du nom distinctif (DN), afin de v&eacute;rifier s'il
185     contient une cha&icirc;ne connue. Il existe deux m&eacute;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>
188
189     <p>La m&eacute;thode du module <module>mod_auth_basic</module> est en g&eacute;n&eacute;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&eacute;es de mots de passe contenant <em>tous</em> les clients
194     autoris&eacute;s, comme suit :</p>
195
196     <highlight language="config">
197 SSLVerifyClient      none
198 SSLCACertificateFile conf/ssl.crt/ca.crt
199 SSLCACertificatePath conf/ssl.crt
200
201 &lt;Directory /usr/local/apache2/htdocs/secure/area&gt;
202 SSLVerifyClient      require
203     SSLVerifyDepth       5
204     SSLOptions           +FakeBasicAuth
205     SSLRequireSSL
206     AuthName             "Snake Oil Authentication"
207     AuthType             Basic
208     AuthBasicProvider    file
209     AuthUserFile         /usr/local/apache2/conf/httpd.passwd
210     Require              valid-user
211 &lt;/Directory&gt;
212     </highlight>
213     
214
215     <p>Le mot de passe utilis&eacute; dans cet exemple correspond &agrave; la cha&icirc;ne de
216     caract&egrave;res "password" chiffr&eacute;e en DES. Voir la documentation de la
217     directive <directive module="mod_ssl">SSLOptions</directive> pour
218     plus de d&eacute;tails.</p>
219
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>
224     </example>
225
226     <p>Lorsque vos clients font tous partie d'une m&ecirc;me hi&eacute;rarchie, ce qui
227     appara&icirc;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>
230
231
232     <highlight language="config">
233 SSLVerifyClient      none
234 SSLCACertificateFile conf/ssl.crt/ca.crt
235 SSLCACertificatePath conf/ssl.crt
236
237 &lt;Directory /usr/local/apache2/htdocs/secure/area&gt;
238   SSLVerifyClient      require
239   SSLVerifyDepth       5
240   SSLOptions           +FakeBasicAuth
241   SSLRequireSSL
242   SSLRequire       %{SSL_CLIENT_S_DN_O}  eq "Snake Oil, Ltd." \
243                and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"}
244 &lt;/Directory&gt;
245     </highlight>
246 </section>
247
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&egrave;s &agrave; une partie de l'Intranet, pour les clients en
252 provenance de l'Internet ? Je souhaite quand-m&ecirc;me autoriser l'acc&egrave;s en HTTP
253 aux clients de l'intranet.</title>
254
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    &agrave; laquelle vous voulez autoriser l'acc&egrave;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&ocirc;te virtuel HTTPS, afin qu'elles
260    s'appliquent &agrave; la fois &agrave; HTTP et HTTPS.</p>
261
262     <highlight language="config">
263 SSLCACertificateFile conf/ssl.crt/company-ca.crt
264
265 &lt;Directory /usr/local/apache2/htdocs&gt;
266 #   En dehors de subarea, seul l'acc&egrave;s depuis l'intranet est
267 #   autoris&eacute;
268     Order                deny,allow
269     Deny                 from all
270     Allow                from 192.168.1.0/24
271 &lt;/Directory&gt;
272
273 &lt;Directory /usr/local/apache2/htdocs/subarea&gt;
274 #   Dans subarea, tout acc&egrave;s depuis l'intranet est autoris&eacute;
275 #   mais depuis l'Internet, seul l'acc&egrave;s par HTTPS + chiffrement fort + Mot de passe
276 #   ou HTTPS + chiffrement fort + certificat client n'est autoris&eacute;.
277
278 #   Si HTTPS est utilis&eacute;, on s'assure que le niveau de chiffrement est fort.
279 #   Autorise en plus les certificats clients comme une alternative &agrave;
280 #   l'authentification basique.
281     SSLVerifyClient      optional
282     SSLVerifyDepth       1
283     SSLOptions           +FakeBasicAuth +StrictRequire
284     SSLRequire           %{SSL_CIPHER_USEKEYSIZE} &gt;= 128
285     
286     #   ON oblige les clients venant d'Internet &agrave; utiliser HTTPS
287     RewriteEngine        on
288     RewriteCond          %{REMOTE_ADDR} !^192\.168\.1\.[0-9]+$
289     RewriteCond          %{HTTPS} !=on
290     RewriteRule          . - [F]
291     
292     #   On permet l'acc&egrave;s soit sur les crit&egrave;res r&eacute;seaux, soit par authentification Basique
293     Satisfy              any
294     
295     #   Contr&ocirc;le d'acc&egrave;s r&eacute;seau
296     Order                deny,allow
297     Deny                 from all
298     Allow                192.168.1.0/24
299     
300     #   Configuration de l'authentification HTTP Basique
301     AuthType             basic
302     AuthName             "Protected Intranet Area"
303     AuthBasicProvider    file
304     AuthUserFile         conf/protected.passwd
305     Require              valid-user
306 &lt;/Directory&gt;
307     </highlight>
308 </section>
309 </section>
310 <!-- /access control -->
311
312 <section id="logging">
313     <title>Journalisation</title>
314
315     <p><module>mod_ssl</module> peut enregistrer des informations de
316     d&eacute;bogage tr&egrave;s verbeuses dans le journal des erreurs, lorsque sa
317     directive <directive module="core">LogLevel</directive> est d&eacute;finie
318     &agrave; des niveaux de trace &eacute;lev&eacute;s. Par contre, sur un serveur tr&egrave;s
319     sollicit&eacute;, le niveau <code>info</code> sera probablement d&eacute;j&agrave; trop
320     &eacute;lev&eacute;. Souvenez-vous que vous pouvez configurer la directive
321     <directive module="core">LogLevel</directive> par module afin de
322     pourvoir &agrave; vos besoins.</p>
323 </section>
324
325 </manualpage>
326