]> granicus.if.org Git - apache/blob - docs/manual/ssl/ssl_howto.html.fr
Rebuild.
[apache] / docs / manual / ssl / ssl_howto.html.fr
1 <?xml version="1.0" encoding="ISO-8859-1"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head>
4 <meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type" />
5 <!--
6         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
7               This file is generated from xml source: DO NOT EDIT
8         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
9       -->
10 <title>Chiffrement fort SSL/TLS : Mode d'emploi - Serveur Apache HTTP Version 2.5</title>
11 <link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
12 <link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
13 <link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" />
14 <script src="../style/scripts/prettify.min.js" type="text/javascript">
15 </script>
16
17 <link href="../images/favicon.ico" rel="shortcut icon" /></head>
18 <body id="manual-page"><div id="page-header">
19 <p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/quickreference.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p>
20 <p class="apache">Serveur Apache HTTP Version 2.5</p>
21 <img alt="" src="../images/feather.png" /></div>
22 <div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
23 <div id="path">
24 <a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Serveur HTTP</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="../">Version 2.5</a> &gt; <a href="./">SSL/TLS</a></div><div id="page-content"><div id="preamble"><h1>Chiffrement fort SSL/TLS : Mode d'emploi</h1>
25 <div class="toplang">
26 <p><span>Langues Disponibles: </span><a href="../en/ssl/ssl_howto.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
27 <a href="../fr/ssl/ssl_howto.html" title="Français">&nbsp;fr&nbsp;</a></p>
28 </div>
29
30
31 <p>Ce document doit vous permettre de démarrer et de faire fonctionner
32 une configuration de base. Avant de vous lancer dans l'application de
33 techniques avancées, il est fortement recommandé de lire le reste
34 de la documentation SSL afin d'en comprendre le fonctionnement de
35 manière plus approfondie.</p>
36 </div>
37 <div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#configexample">Exemple de configuration basique</a></li>
38 <li><img alt="" src="../images/down.gif" /> <a href="#ciphersuites">Suites d'algorithmes de chiffrement et mise en oeuvre du chiffrement fort</a></li>
39 <li><img alt="" src="../images/down.gif" /> <a href="#ocspstapling">Agrafage OCSP</a></li>
40 <li><img alt="" src="../images/down.gif" /> <a href="#accesscontrol">Authentification du client et contrôle d'accès</a></li>
41 <li><img alt="" src="../images/down.gif" /> <a href="#logging">Journalisation</a></li>
42 </ul><h3>Voir aussi</h3><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
43 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
44 <div class="section">
45 <h2><a name="configexample" id="configexample">Exemple de configuration basique</a><a title="Lien permanent" href="#configexample" class="permalink">&para;</a></h2>
46
47
48 <p>Votre configuration SSL doit comporter au moins les directives
49 suivantes :</p>
50
51 <pre class="prettyprint lang-config">Listen 443
52 &lt;VirtualHost *:443&gt;
53     ServerName www.example.com
54     SSLEngine on
55     SSLCertificateFile "/path/to/www.example.com.cert"
56     SSLCertificateKeyFile "/path/to/www.example.com.key"
57 &lt;/VirtualHost&gt;</pre>
58
59
60 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
61 <div class="section">
62 <h2><a name="ciphersuites" id="ciphersuites">Suites d'algorithmes de chiffrement et mise en oeuvre du chiffrement fort</a><a title="Lien permanent" href="#ciphersuites" class="permalink">&para;</a></h2>
63
64
65 <div class="warning">
66 <p>Le "chiffrement fort est et a toujours été une cible mouvante. En outre, la
67 définition du terme "fort" dépend de l'utilisation que vous allez faire de votre
68 chiffrement, de vos modèles de menaces, et du niveau de risque que vous
69 considérez comme acceptable. L'équipe du serveur HTTP Apache ne peut donc pas
70 définir ce chiffrement fort à votre place.</p>
71 <p>Dans ce document dont la dernière mise à jour remonte à la mi-2016, une
72 "chiffrement fort" fait référence à une implémentation TLS qui fournit, en plus
73 d'une protection basique de la confidentialité, de l'intégrité et de
74 l'authenticité que tout utilisateur s'attend à trouver, toutes les
75 fonctionnalités suivantes :</p>
76 <ul>
77 <li>Une confidentialité persistante (Forward Secrecy) parfaite qui garantie que
78 la découverte de la clé privée d'un serveur ne compromettra pas la
79 condidentialité des communications TLS passées.</li>
80 <li>Une protection contre les types d'attaque connus contre les anciennes
81 implémentations SSL et TLS comme <a href="https://en.wikipedia.org/wiki/POODLE">POODLE</a> et <a href="https://en.wikipedia.org/wiki/Transport_Layer_Security#BEAST_attack">BEAST</a>.</li>
82 <li>Le support des algorithmes de chiffrement les plus efficaces disponibles sur
83 les navigateurs web modernes (et à jour), ainsi que sur les autres clients HTTP.</li>
84 <li>Le <strong>Rejet</strong> des clients qui ne sont pas en mesure de respecter
85 ces prérequis. En d'autres termes, un "chiffrement fort" implique que les
86 clients obsolètes ne doivent pas avoir la possibilité de se connecter au serveur
87 afin de les empêcher de mettre en danger leurs utilisateurs. Vous seul(e) êtes
88 alors à même de décider si ce comportement est approprié à votre situation.</li>
89 </ul>
90 <p>Notez cependant qu'un <em>chiffrement fort</em> ne suffit pas à lui seul pour
91 assurer un niveau de <em>securité</em> fort (A titre d'exemple, les attaques
92 oracle sur la compression HTTP comme <a href="https://en.wikipedia.org/wiki/BREACH_(security_exploit)">BREACH</a>
93 peuvent nécessiter des actions supplémentaires pour être éradiquées).</p>
94 </div>
95
96 <ul>
97 <li><a href="#onlystrong">Comment créer un serveur SSL
98 qui n'accepte que le chiffrement fort ?</a></li>
99 <li><a href="#strongurl">Comment créer un serveur qui accepte de nombreux types de
100 chiffrement en général, mais exige un chiffrement fort pour pouvoir
101 accéder à une URL particulière ?</a></li>
102 </ul>
103
104
105 <h3><a name="onlystrong" id="onlystrong">Comment créer un serveur SSL qui n'accepte
106 que le chiffrement fort ?</a></h3>
107
108     <p>La configuration suivante active le "chiffrement fort" telle qu'il est
109     défini ci-dessus, et s'inspire du document de la Fondation Mozilla sur les
110     prérequis de <a href="https://wiki.mozilla.org/Security/Server_Side_TLS">Server Side
111     TLS</a> :</p>
112
113     <pre class="prettyprint lang-config"># Configuration "moderne" définie en août 2016 par le générateur de
114 # configuration SSL de la Fondation Mozilla. Ce dernier est disponible à
115 # https://mozilla.github.io/server-side-tls/ssl-config-generator/
116 SSLProtocol         all -SSLv3 -TLSv1 -TLSv1.1
117 # De nombreux algorithmes de chiffrement définis ici nécessitent une version
118 # récente (1.0.1 ou plus) d'OpenSSL. Certains nécessitent même OpenSSL 1.1.0
119 # qui, à l'heure où ces lignes sont écrites, était encore en pre-release.
120 SSLCipherSuite      ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
121 SSLHonorCipherOrder on
122 SSLCompression      off
123 SSLSessionTickets   off</pre>
124
125
126     <ul>
127     <li>SSL 3.0 et TLS 1.0 étant vulnérables à certaines attaques connues contre
128     le protocole, ils ont été entièrement retirés.</li>
129     <li>Actuellement (en août 2016), la désactivation de TLS 1.1 est facultative
130     ; TLS 1.2 fournit des options de chiffrement plus évoluées, mais la version
131     1.1 n'est pas encore considérée comme obsolète. La désactivation de TLS 1.1
132     peut cependant juguler des attaques contre certaines implémentations
133     dépassées de TLS.</li>
134     <li>La directive <code class="directive"><a href="../mod/mod_ssl.html#sslhonorcipherorder">SSLHonorCipherOrder</a></code>
135     permet de s'assurer que ce sont les préférences de chiffrement du serveur
136     qui seront suivies, et non celles du client.</li>
137     <li>La désactivation de <code class="directive"><a href="../mod/mod_ssl.html#sslcompression">SSLCompression</a></code> permet de prévenir les attaques
138     oracle sur la compression TLS (en autres <a href="https://en.wikipedia.org/wiki/CRIME">CRIME</a>).</li>
139     <li>La désactivation de <code class="directive"><a href="../mod/mod_ssl.html#sslsessiontickets">SSLSessionTickets</a></code> permet de s'assurer que la
140     qualité de la confidentialité persistante (Forward Secrecy) ne sera pas
141     compromise, même si le serveur n'est pas redémarré régulièrement.</li>
142     </ul>
143
144     <p>C'est votre version d'OpenSSL installée qui détermine la liste des
145     algorithmes de chiffrement supportés par la directive <code class="directive"><a href="../mod/mod_ssl.html#sslciphersuite">SSLCipherSuite</a></code>, et non le serveur. Pour pouvoir
146     utiliser certains d'entre eux, vous devrez peut-être mettre à jour votre
147     version d'OpenSSL.</p>
148
149
150 <h3><a name="strongurl" id="strongurl">Comment créer un serveur qui accepte de nombreux types de
151 chiffrement en général, mais exige un chiffrement fort pour pouvoir
152 accéder à une URL particulière ?</a></h3>
153
154     <p>Dans ce cas bien évidemment, une directive <code class="directive"><a href="../mod/mod_ssl.html#sslciphersuite">SSLCipherSuite</a></code> au niveau du serveur principal
155     qui restreint le choix des suites de chiffrement aux versions les plus
156     fortes ne conviendra pas. <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> peut cependant être
157     reconfiguré au sein de blocs <code>Location</code> qui permettent
158     d'adapter la configuration générale à un répertoire spécifique ;
159     <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> peut alors forcer automatiquement une
160     renégociation des paramètres SSL pour parvenir au but recherché.
161     Cette configuration peut se présenter comme suit :</p>
162     <pre class="prettyprint lang-config"># soyons très tolérant a priori -- utilisons la suite d'algorithmes de
163 # chiffrement "intermédiaire" de Mozilla (des suites plus légères peuvent aussi
164 # être utilisées mais ne seront pas documentées ici)
165 SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
166
167 &lt;Location "/strong/area"&gt;
168 # sauf pour https://hostname/strong/area/ et ses sous-répertoires qui exigent
169 # des chiffrements forts
170 SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
171 &lt;/Location&gt;</pre>
172
173
174 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
175 <div class="section">
176 <h2><a name="ocspstapling" id="ocspstapling">Agrafage OCSP</a><a title="Lien permanent" href="#ocspstapling" class="permalink">&para;</a></h2>
177
178
179 <p>Le protocole de contrôle du statut des certificats en ligne (Online
180 Certificate Status Protocol - OCSP) est un mécanisme permettant de
181 déterminer si un certificat a été révoqué ou non, et l'agrafage OCSP en
182 est une fonctionnalité particulière par laquelle le serveur, par exemple
183 httpd et mod_ssl, maintient une liste des réponses OCSP actuelles pour
184 ses certificats et l'envoie aux clients qui communiquent avec lui. La
185 plupart des certificats contiennent l'adresse d'un répondeur OCSP maintenu
186 par l'Autorité de Certification (CA) spécifiée, et mod_ssl peut requérir
187 ce répondeur pour obtenir une réponse signée qui peut être envoyée aux
188 clients qui communiquent avec le serveur.</p>
189
190 <p>L'agrafage OCSP est la méthode la plus performante pour obtenir le
191 statut d'un certificat car il est disponible au niveau du serveur, et le
192 client n'a donc pas besoin d'ouvrir une nouvelle connexion vers
193 l'autorité de certification. Autres avantages de l'absence de
194 communication entre le client et l'autorité de certification :
195 l'autorité de certification n'a pas accès à l'historique de navigation
196 du client, et l'obtention du statut du certificat est plus efficace car
197 elle n'est plus assujettie à une surcharge éventuelle des serveurs de
198 l'autorité de certification.</p>
199
200 <p>La charge du serveur est moindre car la réponse qu'il a obtenu du
201 répondeur OCSP peut être réutilisée par tous les clients qui utilisent
202 le même certificat dans la limite du temps de validité de la réponse.</p>
203
204 <p>Une fois le support général SSL correctement configuré, l'activation
205 de l'agrafage OCSP ne requiert que des modifications mineures
206 à la configuration de httpd et il suffit en général de l'ajout de ces
207 deux directives :</p>
208
209     <pre class="prettyprint lang-config">SSLUseStapling On
210 SSLStaplingCache "shmcb:ssl_stapling(32768)"</pre>
211
212
213 <p>Ces directives sont placées de façon à ce qu'elles aient une portée
214 globale (et particulièrement en dehors de toute section VirtualHost), le
215 plus souvent où sont placées les autres directives de configuration
216 globales SSL, comme <code>conf/extra/httpd-ssl.conf</code> pour les
217 installations de httpd à partir des sources, ou
218 <code>/etc/apache2/mods-enabled/ssl.conf</code> pour Ubuntu ou Debian,
219 etc...</p>
220
221 <p>Cette directive <code class="directive">SSLStaplingCache</code> particulière
222 nécessite le chargement du module <code class="module"><a href="../mod/mod_socache_shmcb.html">mod_socache_shmcb</a></code> (à
223 cause du préfixe <code>shmcb</code> de son argument). Ce module est en
224 général déjà activé pour la directive
225 <code class="directive">SSLSessionCache</code>, ou pour des modules autres que
226 <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code>. Si vous activez un cache de session SSL
227 utilisant un mécanisme autre que <code class="module"><a href="../mod/mod_socache_shmcb.html">mod_socache_shmcb</a></code>,
228 utilisez aussi ce mécanisme alternatif pour la directive
229 <code class="directive">SSLStaplingCache</code>. Par exemple :</p>
230
231     <pre class="prettyprint lang-config">SSLSessionCache "dbm:ssl_scache"
232 SSLStaplingCache "dbm:ssl_stapling"</pre>
233
234
235 <p>Vous pouvez utiliser la commande openssl pour vérifier que votre
236 serveur envoie bien une réponse OCSP :</p>
237
238 <pre>$ openssl s_client -connect www.example.com:443 -status -servername www.example.com
239 ...
240 OCSP response: 
241 ======================================
242 OCSP Response Data:
243     OCSP Response Status: successful (0x0)
244     Response Type: Basic OCSP Response
245 ...
246     Cert Status: Good
247 ...</pre>
248
249 <p>Les sections suivantes explicitent les situations courantes qui
250 requièrent des modifications supplémentaires de la configuration. Vous
251 pouvez aussi vous référer au manuel de référence de
252 <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code>.</p>
253
254 <h3>Si l'on utilise plus que quelques certificats SSL pour le serveur</h3>
255
256 <p>Les réponses OCSP sont stockées dans le cache d'agrafage SSL. Alors
257 que les réponses ont une taille de quelques centaines à quelques
258 milliers d'octets, mod_ssl supporte des réponses d'une taille jusqu'à
259 environ 10 ko. Dans notre cas, le nombre de certificats est conséquent
260 et la taille du cache (32768 octets dans l'exemple ci-dessus) doit être
261 augmentée. En cas d'erreur lors du stockage d'une réponse, le
262 message AH01929 sera enregistré dans le journal.</p>
263
264
265 <h3>Si le certificat ne spécifie pas de répondeur OCSP, ou si une
266 adresse différente doit être utilisée</h3>
267
268 <p>Veuillez vous référer à la documentation de la directive <code class="directive"><a href="../mod/mod_ssl.html#sslstaplingforceurl">SSLStaplingForceURL</a></code>.</p>
269
270 <p>Vous pouvez vérifier si un certificat spécifie un répondeur OCSP en
271 utilisant la commande openssl comme suit :</p>
272
273 <pre>$ openssl x509 -in ./www.example.com.crt -text | grep 'OCSP.*http'
274 OCSP - URI:http://ocsp.example.com</pre>
275
276 <p>Si un URI OCSP est fourni et si le serveur web peut communiquer
277 directement avec lui sans passer par un mandataire, aucune modification
278 supplémentaire de la configuration n'est requise. Notez que les règles
279 du pare-feu qui contrôlent les connexions sortantes en provenance du
280 serveur web devront peut-être subir quelques ajustements.</p>
281
282 <p>Si aucun URI OCSP n'est fourni, contactez votre autorité de
283 certification pour savoir s'il en existe une ; si c'est le
284 cas, utilisez la directive <code class="directive"><a href="../mod/mod_ssl.html#sslstaplingforceurl">SSLStaplingForceURL</a></code> pour la spécifier dans
285 la configuration du serveur virtuel qui utilise le certificat.</p>
286
287
288 <h3>Si plusieurs serveurs virtuels sont configurés pour utiliser SSL
289 et si l'agrafage OCSP doit être désactivé pour certains d'entre eux</h3>
290
291
292 <p>Ajoutez la directive <code>SSLUseStapling Off</code> à la
293 configuration des serveurs virtuels pour lesquels l'agrafage OCSP doit
294 être désactivé.</p>
295
296
297 <h3>Si le répondeur OCSP est lent ou instable</h3>
298
299 <p>De nombreuses directives permettent de gérer les temps de réponse et
300 les erreurs. Référez-vous à la documentation de <code class="directive"><a href="../mod/mod_ssl.html#sslstaplingfaketrylater">SSLStaplingFakeTryLater</a></code>, <code class="directive"><a href="../mod/mod_ssl.html#sslstaplingrespondertimeout">SSLStaplingResponderTimeout</a></code>, et <code class="directive"><a href="../mod/mod_ssl.html#sslstaplingreturnrespondererrors">SSLStaplingReturnResponderErrors</a></code>.</p>
301
302
303 <h3>Si mod_ssl enregistre l'erreur AH02217 dans le journal</h3>
304
305 <pre>AH02217: ssl_stapling_init_cert: Can't retrieve issuer certificate!</pre>
306 <p>Afin de pouvoir supporter l'agrafage OCSP lorsqu'un certificat de
307 serveur particulier est utilisé, une chaîne de certification pour ce
308 certificat doit être spécifiée. Si cela n'a pas été fait lors de
309 l'activation de SSL, l'erreur AH02217 sera enregistrée lorsque
310 l'agrafage OCSP sera activé, et les clients qui utilisent le certificat
311 considéré ne recevront pas de réponse OCSP.</p>
312
313 <p>Veuillez vous référer à la documentation des directives <code class="directive"><a href="../mod/mod_ssl.html#sslcertificatechainfile">SSLCertificateChainFile</a></code> et <code class="directive"><a href="../mod/mod_ssl.html#sslcertificatefile">SSLCertificateFile</a></code> pour spécifier une
314 chaîne de certification.</p>
315
316
317 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
318 <div class="section">
319 <h2><a name="accesscontrol" id="accesscontrol">Authentification du client et contrôle d'accès</a><a title="Lien permanent" href="#accesscontrol" class="permalink">&para;</a></h2>
320
321 <ul>
322 <li><a href="#allclients">Comment forcer les clients
323 à s'authentifier à l'aide de certificats ?</a></li>
324 <li><a href="#arbitraryclients">Comment forcer les clients
325 à s'authentifier à l'aide de certificats pour une URL particulière,
326 mais autoriser quand-même tout client anonyme
327 à accéder au reste du serveur ?</a></li>
328 <li><a href="#certauthenticate">Comment n'autoriser l'accès à une URL
329 particulière qu'aux clients qui possèdent des certificats, mais autoriser
330 l'accès au reste du serveur à tous les clients ?</a></li>
331 <li><a href="#intranet">Comment imposer HTTPS avec chiffrements forts,
332 et soit authentification de base, soit possession de certificats clients,
333 pour l'accès à une partie de l'Intranet, pour les clients en
334 provenance de l'Internet ?</a></li>
335 </ul>
336
337 <h3><a name="allclients" id="allclients">Comment forcer les clients
338 à s'authentifier à l'aide de certificats ?
339 </a></h3>
340
341
342     <p>Lorsque vous connaissez tous vos clients (comme c'est en général le cas
343     au sein d'un intranet d'entreprise), vous pouvez imposer une
344     authentification basée uniquement sur les certificats. Tout ce dont vous
345     avez besoin pour y parvenir est de créer des certificats clients signés par
346     le certificat de votre propre autorité de certification
347     (<code>ca.crt</code>), et d'authentifier les clients à l'aide de ces
348     certificats.</p>
349     <pre class="prettyprint lang-config"># exige un certificat client signé par le certificat de votre CA
350 # contenu dans ca.crt
351 SSLVerifyClient require
352 SSLVerifyDepth 1
353 SSLCACertificateFile "conf/ssl.crt/ca.crt"</pre>
354
355
356
357 <h3><a name="arbitraryclients" id="arbitraryclients">Comment forcer les clients
358 à s'authentifier à l'aide de certificats pour une URL particulière,
359 mais autoriser quand-même tout client anonyme
360 à accéder au reste du serveur ?</a></h3>
361
362
363 <p>Pour forcer les clients à s'authentifier à l'aide de certificats pour une
364 URL particulière, vous pouvez utiliser les fonctionnalités de reconfiguration
365 de <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> en fonction du répertoire :</p>
366
367     <pre class="prettyprint lang-config">SSLVerifyClient none
368 SSLCACertificateFile "conf/ssl.crt/ca.crt"
369
370 &lt;Location "/secure/area"&gt;
371 SSLVerifyClient require
372 SSLVerifyDepth 1
373 &lt;/Location&gt;</pre>
374
375
376
377 <h3><a name="certauthenticate" id="certauthenticate">Comment n'autoriser l'accès à une URL
378 particulière qu'aux clients qui possèdent des certificats, mais autoriser
379 l'accès au reste du serveur à tous les clients ?</a></h3>
380
381
382     <p>La clé du problème consiste à vérifier si une partie du certificat
383     client correspond à ce que vous attendez. Cela signifie en général
384     consulter tout ou partie du nom distinctif (DN), afin de vérifier s'il
385     contient une chaîne connue. Il existe deux méthodes pour y parvenir ;
386     on utilise soit le module <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code>, soit la
387     directive <code class="directive"><a href="../mod/mod_ssl.html#sslrequire">SSLRequire</a></code>.</p>
388
389     <p>La méthode du module <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code> est en général
390     incontournable lorsque les certificats ont un contenu arbitraire, ou
391     lorsque leur DN ne contient aucun champ connu
392     (comme l'organisation, etc...). Dans ce cas, vous devez construire une base
393     de données de mots de passe contenant <em>tous</em> les clients
394     autorisés, comme suit :</p>
395
396     <pre class="prettyprint lang-config">SSLVerifyClient      none
397 SSLCACertificateFile "conf/ssl.crt/ca.crt"
398 SSLCACertificatePath "conf/ssl.crt"
399
400 &lt;Directory "/usr/local/apache2/htdocs/secure/area"&gt;
401 SSLVerifyClient      require
402     SSLVerifyDepth       5
403     SSLOptions           +FakeBasicAuth
404     SSLRequireSSL
405     AuthName             "Snake Oil Authentication"
406     AuthType             Basic
407     AuthBasicProvider    file
408     AuthUserFile         "/usr/local/apache2/conf/httpd.passwd"
409     Require              valid-user
410 &lt;/Directory&gt;</pre>
411
412     
413
414     <p>Le mot de passe utilisé dans cet exemple correspond à la chaîne de
415     caractères "password" chiffrée en DES. Voir la documentation de la
416     directive <code class="directive"><a href="../mod/mod_ssl.html#ssloptions">SSLOptions</a></code> pour
417     plus de détails.</p>
418
419     <div class="example"><h3>httpd.passwd</h3><pre>/C=DE/L=Munich/O=Snake Oil, Ltd./OU=Staff/CN=Foo:xxj31ZMTZzkVA
420 /C=US/L=S.F./O=Snake Oil, Ltd./OU=CA/CN=Bar:xxj31ZMTZzkVA
421 /C=US/L=L.A./O=Snake Oil, Ltd./OU=Dev/CN=Quux:xxj31ZMTZzkVA</pre></div>
422
423     <p>Lorsque vos clients font tous partie d'une même hiérarchie, ce qui
424     apparaît dans le DN, vous pouvez les authentifier plus facilement en
425     utilisant la directive <code class="directive"><a href="../mod/mod_ssl.html#sslrequire">SSLRequire</a></code>, comme suit :</p>
426
427
428     <pre class="prettyprint lang-config">SSLVerifyClient      none
429 SSLCACertificateFile "conf/ssl.crt/ca.crt"
430 SSLCACertificatePath "conf/ssl.crt"
431
432 &lt;Directory "/usr/local/apache2/htdocs/secure/area"&gt;
433   SSLVerifyClient      require
434   SSLVerifyDepth       5
435   SSLOptions           +FakeBasicAuth
436   SSLRequireSSL
437   SSLRequire       %{SSL_CLIENT_S_DN_O}  eq "Snake Oil, Ltd." \
438                and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"}
439 &lt;/Directory&gt;</pre>
440
441
442
443 <h3><a name="intranet" id="intranet">Comment imposer HTTPS avec chiffrements forts,
444 et soit authentification de base, soit possession de certificats clients,
445 pour l'accès à une partie de l'Intranet, pour les clients en
446 provenance de l'Internet ? Je souhaite quand-même autoriser l'accès en HTTP
447 aux clients de l'intranet.</a></h3>
448
449
450    <p>On suppose dans ces exemples que les clients de l'intranet ont des
451    adresses IP dans la gamme 192.168.1.0/24, et que la partie de l'intranet
452    à laquelle vous voulez autoriser l'accès depuis l'Internet est
453    <code>/usr/local/apache2/htdocs/subarea</code>. Ces lignes de configuration
454    doivent se trouver en dehors de votre hôte virtuel HTTPS, afin qu'elles
455    s'appliquent à la fois à HTTP et HTTPS.</p>
456
457     <pre class="prettyprint lang-config">SSLCACertificateFile "conf/ssl.crt/company-ca.crt"
458
459 &lt;Directory "/usr/local/apache2/htdocs"&gt;
460 #   En dehors de subarea, seul l'accès depuis l'intranet est
461 #   autorisé
462     Require              ip 192.168.1.0/24
463 &lt;/Directory&gt;
464
465 &lt;Directory "/usr/local/apache2/htdocs/subarea"&gt;
466 #   Dans subarea, tout accès depuis l'intranet est autorisé
467 #   mais depuis l'Internet, seul l'accès par HTTPS + chiffrement fort + Mot de passe
468 #   ou HTTPS + chiffrement fort + certificat client n'est autorisé.
469
470 #   Si HTTPS est utilisé, on s'assure que le niveau de chiffrement est fort.
471 #   Autorise en plus les certificats clients comme une alternative à
472 #   l'authentification basique.
473     SSLVerifyClient      optional
474     SSLVerifyDepth       1
475     SSLOptions           +FakeBasicAuth +StrictRequire
476     SSLRequire           %{SSL_CIPHER_USEKEYSIZE} &gt;= 128
477     
478     #   ON oblige les clients venant d'Internet à utiliser HTTPS
479     RewriteEngine        on
480     RewriteCond          "%{REMOTE_ADDR}" "!^192\.168\.1\.[0-9]+$"
481     RewriteCond          "%{HTTPS}" "!=on"
482     RewriteRule          "." "-" [F]
483     
484     #   On permet l'accès soit sur les critères réseaux, soit par authentification Basique
485     Satisfy              any
486     
487     #   Contrôle d'accès réseau
488     Require              ip 192.168.1.0/24
489     
490     #   Configuration de l'authentification HTTP Basique
491     AuthType             basic
492     AuthName             "Protected Intranet Area"
493     AuthBasicProvider    file
494     AuthUserFile         "conf/protected.passwd"
495     Require              valid-user
496 &lt;/Directory&gt;</pre>
497
498
499 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
500 <div class="section">
501 <h2><a name="logging" id="logging">Journalisation</a><a title="Lien permanent" href="#logging" class="permalink">&para;</a></h2>
502     
503
504     <p><code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> peut enregistrer des informations de
505     débogage très verbeuses dans le journal des erreurs, lorsque sa
506     directive <code class="directive"><a href="../mod/core.html#loglevel">LogLevel</a></code> est définie
507     à des niveaux de trace élevés. Par contre, sur un serveur très
508     sollicité, le niveau <code>info</code> sera probablement déjà trop
509     élevé. Souvenez-vous que vous pouvez configurer la directive
510     <code class="directive"><a href="../mod/core.html#loglevel">LogLevel</a></code> par module afin de
511     pourvoir à vos besoins.</p>
512 </div></div>
513 <div class="bottomlang">
514 <p><span>Langues Disponibles: </span><a href="../en/ssl/ssl_howto.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
515 <a href="../fr/ssl/ssl_howto.html" title="Français">&nbsp;fr&nbsp;</a></p>
516 </div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Commentaires</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&amp;A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div>
517 <script type="text/javascript"><!--//--><![CDATA[//><!--
518 var comments_shortname = 'httpd';
519 var comments_identifier = 'http://httpd.apache.org/docs/trunk/ssl/ssl_howto.html';
520 (function(w, d) {
521     if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
522         d.write('<div id="comments_thread"><\/div>');
523         var s = d.createElement('script');
524         s.type = 'text/javascript';
525         s.async = true;
526         s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
527         (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
528     }
529     else {
530         d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
531     }
532 })(window, document);
533 //--><!]]></script></div><div id="footer">
534 <p class="apache">Copyright 2018 The Apache Software Foundation.<br />Autorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
535 <p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/quickreference.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!--
536 if (typeof(prettyPrint) !== 'undefined') {
537     prettyPrint();
538 }
539 //--><!]]></script>
540 </body></html>