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 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
5 This file is generated from xml source: DO NOT EDIT
6 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
8 <title>Chiffrement fort SSL/TLS : Mode d'emploi - Serveur Apache HTTP</title>
9 <link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
10 <link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
11 <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" />
12 <script src="../style/scripts/prettify.js" type="text/javascript">
15 <link href="../images/favicon.ico" rel="shortcut icon" /></head>
16 <body id="manual-page"><div id="page-header">
17 <p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.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>
18 <p class="apache">Serveur Apache HTTP Version 2.5</p>
19 <img alt="" src="../images/feather.gif" /></div>
20 <div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>
22 <a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.5</a> > <a href="./">SSL/TLS</a></div><div id="page-content"><div id="preamble"><h1>Chiffrement fort SSL/TLS : Mode d'emploi</h1>
24 <p><span>Langues Disponibles: </span><a href="../en/ssl/ssl_howto.html" hreflang="en" rel="alternate" title="English"> en </a> |
25 <a href="../fr/ssl/ssl_howto.html" title="Français"> fr </a></p>
29 <p>Ce document doit vous permettre de démarrer et de faire fonctionner
30 une configuration de base. Avant de vous lancer dans l'application de
31 techniques avancées, il est fortement recommandé de lire le reste
32 de la documentation SSL afin d'en comprendre le fonctionnement de
33 manière plus approfondie.</p>
35 <div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#configexample">Exemple de configuration basique</a></li>
36 <li><img alt="" src="../images/down.gif" /> <a href="#ciphersuites">Suites de chiffrement et mise en application de la sécurité
37 de haut niveau</a></li>
38 <li><img alt="" src="../images/down.gif" /> <a href="#strongurl">Comment créer un serveur qui accepte tous les types de
39 chiffrement en général, mais exige un chiffrement fort pour pouvoir
40 accéder à une URL particulière ?</a></li>
41 <li><img alt="" src="../images/down.gif" /> <a href="#accesscontrol">Authentification du client et contrôle d'accès</a></li>
42 <li><img alt="" src="../images/down.gif" /> <a href="#logging">Journalisation</a></li>
43 </ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
44 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
46 <h2><a name="configexample" id="configexample">Exemple de configuration basique</a></h2>
49 <p>Votre configuration SSL doit comporter au moins les directives
52 <pre class="prettyprint lang-config">
54 <VirtualHost *:443>
55 ServerName www.example.com
57 SSLCertificateFile /path/to/www.example.com.cert
58 SSLCertificateKeyFile /path/to/www.example.com.key
63 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
65 <h2><a name="ciphersuites" id="ciphersuites">Suites de chiffrement et mise en application de la sécurité
66 de haut niveau</a></h2>
69 <li><a href="#onlystrong">Comment créer un serveur SSL
70 qui n'accepte que le chiffrement fort ?</a></li>
71 <li><a href="#strongurl">Comment créer un serveur qui accepte tous les types de
72 chiffrement en général, mais exige un chiffrement fort pour pouvoir
73 accéder à une URL particulière ?</a></li>
77 <h3><a name="onlystrong" id="onlystrong">Comment créer un serveur SSL qui n'accepte
78 que le chiffrement fort ?</a></h3>
80 <p>Les directives suivantes ne permettent que les
81 chiffrements de plus haut niveau :</p>
82 <pre class="prettyprint lang-config">
83 SSLCipherSuite HIGH:!aNULL:!MD5
89 <p>Avec la configuration qui suit, vous indiquez une préférence pour
90 des algorityhmes de chiffrement spécifiques optimisés en matière de
91 rapidité (le choix final sera opéré par mod_ssl, dans la mesure ou le
92 client les supporte) :</p>
94 <pre class="prettyprint lang-config">
95 SSLCipherSuite RC4-SHA:AES128-SHA:HIGH:!aNULL:!MD5
96 SSLHonorCipherOrder on
99 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
100 <div class="section">
101 <h2><a name="strongurl" id="strongurl">Comment créer un serveur qui accepte tous les types de
102 chiffrement en général, mais exige un chiffrement fort pour pouvoir
103 accéder à une URL particulière ?</a></h2>
105 <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
106 qui restreint le choix des suites de chiffrement aux versions les plus
107 fortes ne conviendra pas. <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> peut cependant être
108 reconfiguré au sein de blocs <code>Location</code> qui permettent
109 d'adapter la configuration générale à un répertoire spécifique ;
110 <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> peut alors forcer automatiquement une
111 renégociation des paramètres SSL pour parvenir au but recherché.
112 Cette configuration peut se présenter comme suit :</p>
113 <pre class="prettyprint lang-config">
114 # soyons très tolérant a priori
115 SSLCipherSuite ALL:!aNULL:RC4+RSA:+HIGH:+MEDIUM:+LOW:+EXP:+eNULL
117 <Location /strong/area>
118 # sauf pour https://hostname/strong/area/ et ses sous-répertoires
119 # qui exigent des chiffrements forts
120 SSLCipherSuite HIGH:!aNULL:!MD5
124 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
125 <div class="section">
126 <h2><a name="accesscontrol" id="accesscontrol">Authentification du client et contrôle d'accès</a></h2>
129 <li><a href="#allclients">Comment forcer les clients
130 à s'authentifier à l'aide de certificats ?</a></li>
131 <li><a href="#arbitraryclients">Comment forcer les clients
132 à s'authentifier à l'aide de certificats pour une URL particulière,
133 mais autoriser quand-même tout client anonyme
134 à accéder au reste du serveur ?</a></li>
135 <li><a href="#certauthenticate">Comment n'autoriser l'accès à une URL
136 particulière qu'aux clients qui possèdent des certificats, mais autoriser
137 l'accès au reste du serveur à tous les clients ?</a></li>
138 <li><a href="#intranet">Comment imposer HTTPS avec chiffrements forts,
139 et soit authentification de base, soit possession de certificats clients,
140 pour l'accès à une partie de l'Intranet, pour les clients en
141 provenance de l'Internet ?</a></li>
144 <h3><a name="allclients" id="allclients">Comment forcer les clients
145 à s'authentifier à l'aide de certificats ?
149 <p>Lorsque vous connaissez tous vos clients (comme c'est en général le cas
150 au sein d'un intranet d'entreprise), vous pouvez imposer une
151 authentification basée uniquement sur les certificats. Tout ce dont vous
152 avez besoin pour y parvenir est de créer des certificats clients signés par
153 le certificat de votre propre autorité de certification
154 (<code>ca.crt</code>), et d'authentifier les clients à l'aide de ces
156 <pre class="prettyprint lang-config">
157 # exige un certificat client signé par le certificat de votre CA
158 # contenu dans ca.crt
159 SSLVerifyClient require
161 SSLCACertificateFile conf/ssl.crt/ca.crt
166 <h3><a name="arbitraryclients" id="arbitraryclients">Comment forcer les clients
167 à s'authentifier à l'aide de certificats pour une URL particulière,
168 mais autoriser quand-même tout client anonyme
169 à accéder au reste du serveur ?</a></h3>
172 <p>Pour forcer les clients à s'authentifier à l'aide de certificats pour une
173 URL particulière, vous pouvez utiliser les fonctionnalités de reconfiguration
174 de <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> en fonction du répertoire :</p>
176 <pre class="prettyprint lang-config">
178 SSLCACertificateFile conf/ssl.crt/ca.crt
180 <Location /secure/area>
181 SSLVerifyClient require
188 <h3><a name="certauthenticate" id="certauthenticate">Comment n'autoriser l'accès à une URL
189 particulière qu'aux clients qui possèdent des certificats, mais autoriser
190 l'accès au reste du serveur à tous les clients ?</a></h3>
193 <p>La clé du problème consiste à vérifier si une partie du certificat
194 client correspond à ce que vous attendez. Cela signifie en général
195 consulter tout ou partie du nom distinctif (DN), afin de vérifier s'il
196 contient une chaîne connue. Il existe deux méthodes pour y parvenir ;
197 on utilise soit le module <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code>, soit la
198 directive <code class="directive"><a href="../mod/mod_ssl.html#sslrequire">SSLRequire</a></code>.</p>
200 <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
201 incontournable lorsque les certificats ont un contenu arbitraire, ou
202 lorsque leur DN ne contient aucun champ connu
203 (comme l'organisation, etc...). Dans ce cas, vous devez construire une base
204 de données de mots de passe contenant <em>tous</em> les clients
205 autorisés, comme suit :</p>
207 <pre class="prettyprint lang-config">
209 SSLCACertificateFile conf/ssl.crt/ca.crt
210 SSLCACertificatePath conf/ssl.crt
212 <Directory /usr/local/apache2/htdocs/secure/area>
213 SSLVerifyClient require
215 SSLOptions +FakeBasicAuth
217 AuthName "Snake Oil Authentication"
219 AuthBasicProvider file
220 AuthUserFile /usr/local/apache2/conf/httpd.passwd
227 <p>Le mot de passe utilisé dans cet exemple correspond à la chaîne de
228 caractères "password" chiffrée en DES. Voir la documentation de la
229 directive <code class="directive"><a href="../mod/mod_ssl.html#ssloptions">SSLOptions</a></code> pour
232 <div class="example"><h3>httpd.passwd</h3><pre>
233 /C=DE/L=Munich/O=Snake Oil, Ltd./OU=Staff/CN=Foo:xxj31ZMTZzkVA
234 /C=US/L=S.F./O=Snake Oil, Ltd./OU=CA/CN=Bar:xxj31ZMTZzkVA
235 /C=US/L=L.A./O=Snake Oil, Ltd./OU=Dev/CN=Quux:xxj31ZMTZzkVA</pre></div>
237 <p>Lorsque vos clients font tous partie d'une même hiérarchie, ce qui
238 apparaît dans le DN, vous pouvez les authentifier plus facilement en
239 utilisant la directive <code class="directive"><a href="../mod/mod_ssl.html#sslrequire">SSLRequire</a></code>, comme suit :</p>
242 <pre class="prettyprint lang-config">
244 SSLCACertificateFile conf/ssl.crt/ca.crt
245 SSLCACertificatePath conf/ssl.crt
247 <Directory /usr/local/apache2/htdocs/secure/area>
248 SSLVerifyClient require
250 SSLOptions +FakeBasicAuth
252 SSLRequire %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." \
253 and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"}
259 <h3><a name="intranet" id="intranet">Comment imposer HTTPS avec chiffrements forts,
260 et soit authentification de base, soit possession de certificats clients,
261 pour l'accès à une partie de l'Intranet, pour les clients en
262 provenance de l'Internet ? Je souhaite quand-même autoriser l'accès en HTTP
263 aux clients de l'intranet.</a></h3>
266 <p>On suppose dans ces exemples que les clients de l'intranet ont des
267 adresses IP dans la gamme 192.168.1.0/24, et que la partie de l'intranet
268 à laquelle vous voulez autoriser l'accès depuis l'Internet est
269 <code>/usr/local/apache2/htdocs/subarea</code>. Ces lignes de configuration
270 doivent se trouver en dehors de votre hôte virtuel HTTPS, afin qu'elles
271 s'appliquent à la fois à HTTP et HTTPS.</p>
273 <pre class="prettyprint lang-config">
274 SSLCACertificateFile conf/ssl.crt/company-ca.crt
276 <Directory /usr/local/apache2/htdocs>
277 # En dehors de subarea, seul l'accès depuis l'intranet est
279 Require ip 192.168.1.0/24
282 <Directory /usr/local/apache2/htdocs/subarea>
283 # Dans subarea, tout accès depuis l'intranet est autorisé
284 # mais depuis l'Internet, seul l'accès par HTTPS + chiffrement fort + Mot de passe
285 # ou HTTPS + chiffrement fort + certificat client n'est autorisé.
287 # Si HTTPS est utilisé, on s'assure que le niveau de chiffrement est fort.
288 # Autorise en plus les certificats clients comme une alternative à
289 # l'authentification basique.
290 SSLVerifyClient optional
292 SSLOptions +FakeBasicAuth +StrictRequire
293 SSLRequire %{SSL_CIPHER_USEKEYSIZE} >= 128
295 # ON oblige les clients venant d'Internet à utiliser HTTPS
297 RewriteCond %{REMOTE_ADDR} !^192\.168\.1\.[0-9]+$
298 RewriteCond %{HTTPS} !=on
301 # On permet l'accès soit sur les critères réseaux, soit par authentification Basique
304 # Contrôle d'accès réseau
305 Require ip 192.168.1.0/24
307 # Configuration de l'authentification HTTP Basique
309 AuthName "Protected Intranet Area"
310 AuthBasicProvider file
311 AuthUserFile conf/protected.passwd
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="logging" id="logging">Journalisation</a></h2>
322 <p><code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> peut enregistrer des informations de
323 débogage très verbeuses dans le journal des erreurs, lorsque sa
324 directive <code class="directive"><a href="../mod/core.html#loglevel">LogLevel</a></code> est définie
325 à des niveaux de trace élevés. Par contre, sur un serveur très
326 sollicité, le niveau <code>info</code> sera probablement déjà trop
327 élevé. Souvenez-vous que vous pouvez configurer la directive
328 <code class="directive"><a href="../mod/core.html#loglevel">LogLevel</a></code> par module afin de
329 pourvoir à vos besoins.</p>
331 <div class="bottomlang">
332 <p><span>Langues Disponibles: </span><a href="../en/ssl/ssl_howto.html" hreflang="en" rel="alternate" title="English"> en </a> |
333 <a href="../fr/ssl/ssl_howto.html" title="Français"> fr </a></p>
334 </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&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>
335 <script type="text/javascript"><!--//--><![CDATA[//><!--
336 var comments_shortname = 'httpd';
337 var comments_identifier = 'http://httpd.apache.org/docs/trunk/ssl/ssl_howto.html';
339 if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
340 d.write('<div id="comments_thread"><\/div>');
341 var s = d.createElement('script');
342 s.type = 'text/javascript';
344 s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
345 (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
348 d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
350 })(window, document);
351 //--><!]]></script></div><div id="footer">
352 <p class="apache">Copyright 2012 The Apache Software Foundation.<br />Autorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
353 <p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.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[//><!--
354 if (typeof(prettyPrint) !== 'undefined') {