<html><head><META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>6. Mettre en œuvre et utiliser SSL pour protéger le trafic HTTP </title><link href="style.css" rel="stylesheet" type="text/css"><meta content="DocBook XSL Stylesheets V1.69.1" name="generator"><link rel="start" href="index.html" title="Guide pratique de mise en œuvre d'un serveur WebDAV sous Apache avec LDAP et SSL"><link rel="up" href="index.html" title="Guide pratique de mise en œuvre d'un serveur WebDAV sous Apache avec LDAP et SSL"><link rel="prev" href="ar01s05.html" title="5. Administration du serveur WebDAV"><link rel="next" href="apa.html" title="A. Outils d'évaluation de performances HTTP/HTTPS"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">6. Mettre en œuvre et utiliser SSL pour protéger le trafic HTTP </th></tr><tr><td align="left" width="20%"><a accesskey="p" href="ar01s05.html">Précédent</a> </td><th align="center" width="60%"> </th><td align="right" width="20%"> <a accesskey="n" href="apa.html">Suivant</a></td></tr></table><hr></div><div class="sect1" lang="fr"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="ssl"></a>6. Mettre en œuvre et utiliser SSL pour protéger le trafic HTTP </h2></div></div><div></div></div><p> De nos jours, la sécurité des données stockées sur un serveur de fichiers est très importante. Des données compromises peuvent coûter des milliers de dollars à une entreprise. Dans la dernière section, nous avons compilé le module d'authentification LDAP dans Apache pour fournir un mécanisme d'authentification. Cependant, le trafic http est très peu sur, et toutes les données sont transférées en clair — ce qui signifie que l'authentification LDAP (utilisateur/mot_de_passe) sera transmise elle aussi en clair. Ceci pose un problème. N'importe qui peut intercepter cet utilisateur/mot_de_passe et accéder aux dossiers de DAV. Pour éviter ceci nous devrons chiffrer le trafic http, essentiellement par HTTP + SSL ou HTTPS. Tout ce qui est transféré en HTTPS est chiffré, ce qui fait que le couple utilisateur/mot_de_passe LDAP ne peut pas être aisément déchiffré. HTTPS tourne sur le port 443. Les binaires résultants étant compilés selon la dernière section, Apache pourra écouter à la fois sur les ports 80 (HTTP normal) et 443 (HTTPS). Si vous désirez utiliser ce serveur uniquement pour DAV, alors je vous suggère fortement de fermer le port 80. Dans cette section du guide pratique, je fournirai des informations sur SSL et comment l'administrer dans un serveur http Apache. </p><div class="sect2" lang="fr"><div class="titlepage"><div><div><h3 class="title"><a name="N1039F"></a>6.1. Introduction à SSL</h3></div></div><div></div></div><p> SSL (Secure Socket Layer) est une couche protocolaire qui se situe entre la couche Réseau et la couche Application. Comme son nom le suggère, SSL fournit un mécanisme de déchiffrement pour toutes sortes de trafic : LDAP, POP, IMAP et plus important, HTTP. </p><p> Ce qui suit est une structure ultra simplifiée des couches impliquées par SSL. </p><pre class="screen"> +-------------------------------------------+ | LDAP | HTTP | POP | IMAP | +-------------------------------------------+ | SSL | +-------------------------------------------+ | Couche réseau | +-------------------------------------------+ </pre><div class="sect3" lang="fr"><div class="titlepage"><div><div><h4 class="title"><a name="N103A9"></a>6.1.1. Algorithmes de cryptographie utilisés par SSL</h4></div></div><div></div></div><p> SSL utilise trois sortes de techniques de cryptographie : les systèmes de clés publiques-privées, de clés symétriques et de <a href="go01.html#digitsign">signatures numériques</a>. </p><p> <span class="strong"><strong>Chiffrement par clés publiques-privées — Initialisation d'une connexion SSL :</strong></span> dans cet algorithme, le chiffrement et le déchiffrement sont effectués en utilisant une paire de clés publiques et privées. Le serveur Web détient la clé privée, et envoie la clé publique au client dans le certificat. </p><div class="orderedlist"><ol type="1"><li><p> Le client demande un contenu au serveur Web en utilisant HTTPS. </p></li><li><p> Le serveur Web répond en envoyant un certificat numérique qui comprend la clé publique du serveur. </p></li><li><p> Le client vérifie si le certificat est expiré. </p></li><li><p> Puis le client vérifie si l'autorité de certification qui a signé le certificat est une autorité de confiance figurant dans la liste du navigateur. Ceci explique pourquoi il est nécessaire d'obtenir un certificat d'une autorité de certification de confiance. </p></li><li><p> Puis, le client vérifie si le nom de domaine pleinement qualifié (FQDN) du serveur Web coïncide avec le Nom Commun (Common Name CN) du certificat. </p></li><li><p> Si tout est correct, la connexion SSL est initialisée. </p></li></ol></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note: N.B. :"><tr><td valign="top" align="center" rowspan="2" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">N.B. :</th></tr><tr><td valign="top" align="left"><p> On ne peut déchiffrer ce qui a été chiffré avec une clé privée qu'avec sa clé publique. De la même façon, on ne peut déchiffrer ce qui a été chiffré avec une clé publique qu'avec sa clé privée. C'est une erreur répandue de penser qu'une clé publique est utilisée pour le chiffrement et que la clé privée est utilisée pour le déchiffrement. Ce n'est pas le cas. On peut utiliser les deux clés pour chiffrer ou déchiffrer. Cependant, si on utilise une clé pour chiffrer, alors l'autre clé devra servir à déchiffrer. Par exemple On ne peut chiffrer un message puis le déchiffrer en utilisant uniquement une clé publique. </p><p> <span class="emphasis"><em>L'utilisation d'une clé privée pour chiffrer et d'une clé publique pour déchiffrer garantit l'identité de l'émetteur (qui est le propriétaire de la clé publique) à ses destinataires. L'utilisation d'une clé publique pour chiffrer et d'une clé privée pour déchiffrer garantit que seul le destinataire (qui est le propriétaire de la clé publique) accédera aux données.</em></span> (c'est-à-dire que seul le détenteur de la clé privée pourra déchiffrer le message). </p></td></tr></table></div><p> <span class="strong"><strong>Chiffrement symétrique — Transmission effective des données</strong></span> : une fois la connexion SSL établie, on utilise le chiffrement symétrique, qui est moins consommateur en cycles de processeur. Avec le chiffrement symétrique, on peut chiffrer et déchiffrer les données en utilisant la même clé. La clé de chiffrement symétrique est échangée durant le processus d'initialisation, en utilisant la clé de chiffrement publique. </p><p> <span class="strong"><strong>Sommation de messages</strong></span> Le serveur utilise des algorithmes de sommation de messages comme <a href="go01.html#hmac">HMAC</a>, <a href="go01.html#sha1">SHA-1</a>, <a href="go01.html#md5">MD5</a> pour vérifier l'intégrité des données transférées. </p></div><div class="sect3" lang="fr"><div class="titlepage"><div><div><h4 class="title"><a name="N103EF"></a>6.1.2. Garantie d'authenticité et d'intégrité</h4></div></div><div></div></div><p>Processus de chiffrement</p><pre class="screen"> Clef privée Clef publique de l'émetteur du destinataire ,-. ,-. ( ).......... ( ).......... `-' ''''|'|'|| `-' ''''''''|| | | | | | | .----------. | | .----------. | .----------. | Texte | V | | Texte | V | Texte | | en |--------->| chiffré |--------->| chiffré | | clair | Étape1 | 1 | Étape2 | 2 |\ `----------' | `----------' `----------' \ __ | | \ [_' | | Étape5 \ | |Étape3 | __ --|-- | | _.--' | V | _..-'' / \ .---------. | .---------. _..-'' Destinataire | SHA 1 | V |Signature| _..-'' |SomMessag|--------->|numérique|' `---------' Étape4 `---------' _ ___ ___ _ (_)/ _) _) _ ____| |__ _ | |_| |_ ____ _____ _____ _____ _____ ____ _| |_ / ___) _ \| || _) _) ___) ___ | _ \| _ \| ___ | _ (_ _) ( (___ | | | || | | || | | ____| || | | || | | ____| | | || |_ \____)_| |_|_||_| |_||_| |_____)_||_|_|_||_|_|_____)_| |_| \__) </pre><div class="itemizedlist"><ul type="opencircle"><li style="list-style-type: circle"><p> Étape 1 : le message original en clair est chiffré avec la clé privée de l'émetteur, ce qui produit le texte chiffré 1. L'authenticité de l'émetteur est garantie. </p></li><li style="list-style-type: circle"><p> Étape 2 : le « <span class="quote">texte chiffré 1</span> » est chiffré à l'aide de la clé publique du destinataire, aboutissant au « <span class="quote">texte crypté 2</span> ». Celui-ci garantira l'authenticité du destinataire, c'est-à-dire que seul le destinataire peut déchiffrer le message à l'aide de sa clé privée. </p></li><li style="list-style-type: circle"><p> Étape 3 : la somme SHA1 du « <span class="quote">texte en clair</span> » est créée. </p></li><li style="list-style-type: circle"><p> Étape 4 : la somme SHA1 du message est ensuite chiffrée avec la clé privée de l'émetteur, ce qui produit la signature numérique du « <span class="quote">texte en clair</span> ». Le destinataire peut utiliser la signature numérique pour s'assurer de l'intégrité du message et de l'authenticité de l'émetteur. </p></li><li style="list-style-type: circle"><p> Étape 5 : la « <span class="quote">signature numérique</span> » et le « <span class="quote">texte chiffré 2</span> » sont ensuite envoyés au destinataire. </p></li></ul></div><p> Processus de déchiffrement </p><pre class="screen"> Clef privée Clef publique du destinataire de l'émetteur ,-. ,-. ( ).......... ( ).......... `-' ''''''''|| `-' '''''''||| | | | | | | .----------. | .----------. | | .----------. | Texte | V | Texte | V | | Texte | .---No1---. | chiffré |--------->| chiffré |--------->| en |------>| SHA 1 | | 2 | Étape1 | 1 | Étape2 | | clair |Étape3 |SomMessag| `----------' `----------' | `----------' `---------' | || | ||Étape5 | || | || .---------. | .---------. | Digital | V | SHA 1 | |Signature|---------------------->|SomMessag| `---------' Étape4 `---No2---' _ _ _ ___ ___ | | // _ (_)/ _) _) _ __| |_____ ____| |__ _ | |_| |_ ____ _____ _____ _____ _____ ____ _| |_ / _ | ___ |/ ___) _ \| || _) _) ___) ___ | _ \| _ \| ___ | _ (_ _) ( (_| | ____( (___ | | | || | | || | | ____| || | | || | | ____| | | || |_ \____|_____)\____)_| |_|_||_| |_||_| |_____)_||_|_|_||_|_|_____)_| |_| \__) </pre><div class="itemizedlist"><ul type="opencircle"><li style="list-style-type: circle"><p> Étape 1 : le « <span class="quote">Texte chiffré 2</span> » est déchiffré avec la clé privée du destinataire, ce qui produit le texte chiffré 1. </p></li><li style="list-style-type: circle"><p> Étape 2 : le « <span class="quote">texte chiffré 1</span> » est déchiffré à l'aide de la clé publique de l'émetteur, ce qui produit le « <span class="quote">texte en clair</span> ». </p></li><li style="list-style-type: circle"><p> Étape 3 : la somme SHA1 du « <span class="quote">texte en clair</span> » est créée. </p></li><li style="list-style-type: circle"><p> Étape 4 : la « <span class="quote">signature numérique</span> » est ensuite déchiffrée à l'aide de la clé publique de l'émetteur, ce qui produit la « <span class="quote">somme SHA 1 du message</span> ». </p></li><li style="list-style-type: circle"><p> Étape 5 : la « <span class="quote">somme SHA 1 du message numéro 1</span> » est ensuite comparée à la « <span class="quote">somme SHA 1 du message numéro 2</span> ». Si elles sont égales, cela signifie que les données n'ont pas été modifiées durant la transmission, et que l'intégrité de l'original « <span class="quote">texte en clair</span> » a été préservée. </p></li></ul></div></div></div><div class="sect2" lang="fr"><div class="titlepage"><div><div><h3 class="title"><a name="N1044B"></a>6.2. Certificats de test</h3></div></div><div></div></div><p> Lorsque nous compilons Apache, nous créons un certificat de test. Nous avons utilisé le makefile fourni par mod_ssl pour créer ce certificat sur mesure. Nous avons utilisé la commande : </p><pre class="screen"> # make certificate TYPE=custom </pre><p> Nous pourrons utiliser ce certificat à des fins de test. </p></div><div class="sect2" lang="fr"><div class="titlepage"><div><div><h3 class="title"><a name="N10455"></a>6.3. Certificats destinés à la production</h3></div></div><div></div></div><p> Il est nécessaire d'obtenir un certificat d'une Autorité de Certification de confiance (nommée ci-après AC) pour une utilisation en production. Les autorités de certification sont des vendeurs de certificats, qui figurent dans la liste des AC de confiance de chaque navigateur. Comme on l'a précisé dans la section des algorithmes de cryptographie, si l'AC ne figure pas dans la liste des autorités de confiance, un message d'alerte s'affichera quand l'utilisateur essayera de se connecter à un site sécurisé. </p><p> Les certificats de test provoqueront eux aussi l'apparition d'un message d'alerte dans le navigateur de l'utilisateur. </p></div><div class="sect2" lang="fr"><div class="titlepage"><div><div><h3 class="title"><a name="N1045C"></a>6.4. Génération d'un CSR</h3></div></div><div></div></div><p> Pour être signée, une CSR (Certificate Signature Request: Demande de Signature de Certificat) doit être envoyée à une AC de confiance. Cette section montre comment on crée une CSR, et comment on l'envoie à l'AC de son choix. </p><pre class="screen"> # openssl req</pre><p> Pour créer une CSR, on peut recourir à cette commande comme suit : </p><pre class="screen"> # cd /usr/local/apache/conf/ # /usr/local/ssl/bin/openssl req -new -nodes -keyout private.key -out public.csr Generating a 1024 bit RSA private key ............++++++ ....++++++ writing new private key to 'private.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:US State or Province Name (full name) [Some-State]:California Locality Name (eg, city) []:San Jose Organization Name (eg, company) [Internet Widgits Pty Ltd]:Seagate Organizational Unit Name (eg, section) []:Global Client Server Common Name (eg, YOUR name) []:xml.seagate.com Email Address []:saqib@seagate.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:badpassword An optional company name []: </pre><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note: PRNG not seeded"><tr><td valign="top" align="center" rowspan="2" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">« <span class="quote">PRNG not seeded</span> »</th></tr><tr><td valign="top" align="left"><p> Si le fichier <code class="filename"> /dev/random</code> n'existe pas sur votre système, le message d'erreur « <span class="quote"><code class="literal">PRNG not seeded</code></span> » s'affichera. Dans ce cas, vous pouvez utiliser la commande suivante : </p><pre class="screen"> # /usr/local/ssl/bin/openssl req -rand <code class="filename">mon_fichier.ext</code> -new -nodes -keyout private.key -out public.csr </pre><p> Remplacez le fichier mon_fichier.ext par le nom d'un fichier existant dans votre système. Vous pouvez spécifier n'importe quel fichier. Openssl utilisera ce fichier pour générer le noyau. </p><p> Sur Solaris 9 on trouve le fichier <code class="filename">/dev/random</code> . Cependant, il est possible que vous ayez à installer le correctif <a href="http://sunsolve.sun.com/pub-cgi/findPatch.pl?patchId=112438" target="_top"> 112438</a> pour accéder à /dev/random </p></td></tr></table></div><p> Arrivé là, vous devrez répondre à plusieurs questions concernant votre serveur pour générer la CSR. </p><p> N.B. : Votre Common Name (CN) est le nom DNS pleinement qualifié (FQDN) de votre serveur web, c'est-à-dire dav.server.com . Si vous saisissez quelque chose d'autre, ça ne marchera PAS. Mettez de côté le mot de passe pour un usage ultérieur. </p><p> Une fois le processus achevé, un fichier <code class="filename">private.key</code> et un fichier <code class="filename">public.csr</code> seront présents dans votre arborescence. Il vous faudra envoyer le fichier <code class="filename"> public.csr</code> à l'autorité de certification. À ce stade, le fichier public.key n'est pas chiffré. pour le chiffrer, saisissez : </p><pre class="screen"> # mv private.key private.key.unecrpyted # /usr/local/ssl/bin/openssl rsa -in private.key.unecrpyted -des3 -out private.key </pre></div><div class="sect2" lang="fr"><div class="titlepage"><div><div><h3 class="title"><a name="InstallingServerCert"></a>6.5. Installation de la clé privée et du certificat du serveur</h3></div></div><div></div></div><p> une fois que l'autorité de certification aura traitée votre demande, elle vous renverra un certificat codé (certificat numérique). Le certificat numérique est au format défini par la norme X.509 v3. Les lignes qui suivent montre la structure d'un certificat numérique conforme à X509 v3 (version française entre parenthèses) </p><div class="itemizedlist"><ul type="opencircle"><li style="list-style-type: circle"><p> Certificat <div class="itemizedlist"><ul type="opencircle"><li style="list-style-type: circle"><p> Version (Version) </p></li><li style="list-style-type: circle"><p> Serial Number (Numéro de série) </p></li><li style="list-style-type: circle"><p> Algorithm ID (Identification de l'algorithme) </p></li><li style="list-style-type: circle"><p> Issuer (Émetteur) </p></li></ul></div> <div class="itemizedlist"><ul type="opencircle"><li style="list-style-type: circle"><p> Validity (Validité) </p></li><li style="list-style-type: circle"><div class="itemizedlist"><ul type="opencircle"><li style="list-style-type: circle"><p> Not Before (pas avant) </p></li><li style="list-style-type: circle"><p> Not After (pas après) </p></li></ul></div></li></ul></div> <div class="itemizedlist"><ul type="opencircle"><li style="list-style-type: circle"><p> Subject (sujet) </p></li></ul></div> <div class="itemizedlist"><ul type="opencircle"><li style="list-style-type: circle"><p> Subject Public Key Info (Info de sujet de clé publique) </p></li><li style="list-style-type: circle"><div class="itemizedlist"><ul type="opencircle"><li style="list-style-type: circle"><p> Public Key Algorithm (algorithme de clé publique) </p></li><li style="list-style-type: circle"><p> RSA Public Key (clé publique RSA) </p></li></ul></div></li></ul></div> <div class="itemizedlist"><ul type="opencircle"><li style="list-style-type: circle"><p> Extensions (Extensions) </p></li></ul></div> </p></li><li style="list-style-type: circle"><p> Certificate Signature Algorithm (algorithme de signature du certificat) </p></li><li style="list-style-type: circle"><p> Certificate Signature (signature du certificat) </p></li></ul></div><div class="sect3" lang="fr"><div class="titlepage"><div><div><h4 class="title"><a name="N104EA"></a>6.5.1. Vérification d'un certificat numérique</h4></div></div><div></div></div><p> Pour vérifier un certificat X.509, utilisez la commande suivante : </p><pre class="screen"> # openssl verify <code class="filename">server.crt</code> server.crt: OK </pre><p> où <code class="filename">server.crt</code> est le nom du fichier qui contient le certificat numérique. </p></div><div class="sect3" lang="fr"><div class="titlepage"><div><div><h4 class="title"><a name="viewingdigitcertcontent"></a>6.5.2. Vérification du contenu d'un certificat numérique</h4></div></div><div></div></div><p> On peut voir le contenu d'un certificat numérique en utilisant la commande <strong class="userinput"><code># openssl x509</code></strong> comme suit : </p><pre class="screen"> # openssl x509 -text -in <code class="filename">server.crt</code> Certificate: Data: Version: 3 (0x2) Serial Number: 312312312 (0x0) Signature Algorithm: md5WithRSAEncryption Issuer: C=US, O=GTE Corporation, CN=GTE CyberTrust Root Validity Not Before: Feb 8 03:25:50 2000 GMT Not After : Feb 8 03:25:50 2001 GMT Subject: C=US, ST=New York, L=Pelham, O=xml-dev, OU=web, CN=www.xml-dev.com/Email=saqib@xml-dev.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): ............ ............ Exponent: 65537 (0x10001) Signature Algorithm: md5WithRSAEncryption ............ ............ </pre></div><div class="sect3" lang="fr"><div class="titlepage"><div><div><h4 class="title"><a name="N1050D"></a>6.5.3. Installation des certificats : modification du fichier httpd.conf </h4></div></div><div></div></div><p> Vous devrez placer ce certificat dans le serveur, et indiquer à Apache où le trouver. </p><p> Dans cet exemple, la clé privée est située dans le répertoire <code class="filename">/usr/local/apache2/conf/ssl.key/</code> et le certificat du serveur est placé dans le répertoire <code class="filename">/usr/local/apache2/conf/ssl.crt/</code>. </p><p> Copiez en le renommant le fichier reçu de l'autorité de certification en <code class="filename">server.crt</code> dans le répertoire <code class="filename">/usr/local/apache2/conf/ssl.crt/</code>. </p><p> et placez le fichier private.key généré à l'étape précédente dans le répertoire <code class="filename">/usr/local/apache2/conf/ssl.key/</code> </p><p> Puis modifiez le fichier <code class="filename">/usr/local/apache2/conf/ssl.key/</code> pour qu'il pointe correctement vers la clé privée et le certificat du serveur : </p><pre class="screen"> # Server Certificate: # Point SSLCertificateFile at a PEM encoded certificate. If # the certificate is encrypted, then you will be prompted for a # pass phrase. Note that a kill -HUP will prompt again. Keep # in mind that if you have both an RSA and a DSA certificate you # can configure both in parallel (to also allow the use of DSA # ciphers, etc.) SSLCertificateFile /usr/local/apache2/conf/ssl.crt/server.crt #SSLCertificateFile /usr/local/apache2/conf/ssl.crt/server-dsa.crt # Server Private Key: # If the key is not combined with the certificate, use this # directive to point at the key file. Keep in mind that if # you've both a RSA and a DSA private key you can configure # both in parallel (to also allow the use of DSA ciphers, etc.) SSLCertificateKeyFile /usr/local/apache2/conf/ssl.key/private.key #SSLCertificateKeyFile /usr/local/apache2/conf/ssl.key/server-dsa.key </pre></div></div><div class="sect2" lang="fr"><div class="titlepage"><div><div><h3 class="title"><a name="N1053A"></a>6.6. Annulation de la phrase de passe pour la clef privée RSA</h3></div></div><div></div></div><p> La clé privée RSA conservée sur le serveur Web est d'habitude chiffrée, et il vous faut une phrase de passe pour parcourir le fichier. Voilà pourquoi quand Apache est lancé avec modssl, une phrase de passe vous est demandée : </p><pre class="screen"> # apachectl startssl Apache/1.3.23 mod_ssl/2.8.6 (Pass Phrase Dialog) Some of your private key files are encrypted for security reasons. In order to read them you have to provide us with the pass phrases. Server your.server.dom:443 (RSA) Enter pass phrase: </pre><p> Il est très important de chiffrer une clé privée RSA. Si un pirate s'empare de votre clé privée RSA non chiffrée, il pourra facilement emprunter l'identité de votre serveur Web. Si la clé est chiffrée, la seule chose que pourra faire le pirate est de tenter une attaque en force brute sur votre phrase de passe. L'utilisation d'une phrase de passe robuste (c'est-à-dire longue) est encouragée. </p><p> Cependant, le fait de chiffrer la clé peut parfois être gênant, dans la mesure où vous devrez saisir la phrase de passe à chaque démarrage du serveur Web. En particulier si vous utilisez les scripts rc pour lancer le serveur Web au démarrage, le processus de démarrage sera stoppé sur l'invite de saisie d'une phrase de passe. </p><p> Vous pouvez facilement vous débarrasser de l'invite de saisie de la phrase de passe en déchiffrant la clé. Cependant, assurez-vous que personne ne pourra s'emparer de cette clé. Je ne saurais trop vous recommander d'appliquer les lignes de conduite de durcissement et de sécurisation du serveur avant de déchiffrer la clé du serveur Web. </p><p> Pour déchiffrer la clé : </p><p> tout d'abord, faites une copie de la clé chiffrée </p><pre class="screen"> # cp server.key server.key.cryp </pre><p> Puis recréez la clé avec chiffrement. L'invite vous demandera la phrase de passe de la clé chiffrée d'origine </p><pre class="screen"> # /usr/local/ssl/bin/openssl rsa -in server.key.cryp -out server.key read RSA key Enter PEM pass phrase: writing RSA key </pre><p> Une façon de sécuriser la clé privée non chiffrée est de limiter l'accès en lecture à l'utilisateur root : </p><pre class="screen"> # chmod 400 server.key </pre></div><div class="sect2" lang="fr"><div class="titlepage"><div><div><h3 class="title"><a name="N10559"></a>6.7. Réglage des performances SSL</h3></div></div><div></div></div><div class="sect3" lang="fr"><div class="titlepage"><div><div><h4 class="title"><a name="N1055C"></a>6.7.1. Cache de session SSL inter-processus</h4></div></div><div></div></div><p> Le modèle de fonctionnement d'Apache est multi-processus ; toutes les requêtes ne seront PAS prises en charge par le même processus. L'information sur la session SSL se perd donc quand un client effectue de multiples requêtes. De multiples échanges de données SSL provoquent une surcharge du système sur le serveur Web et le client. Pour éviter cela, les informations de session SSL doivent être stockées dans un cache de session inter-processus, pour permettre à tous les processus d'accéder aux informations protocolaires. On peut spécifier l'emplacement du cache de session SSL dans la directive SSLSessionCache dans le fichier<code class="filename">/usr/local/apache2/conf/ssl.key/</code> : </p><pre class="screen"> SSLSessionCache shmht:logs/ssl_scache(512000) #SSLSessionCache shmcb:logs/ssl_scache(512000) #SSLSessionCache dbm:logs/ssl_scache SSLSessionCacheTimeout 300 </pre><p> L'utilisation de dbm:logs/ssl_scache crée un cache de type fichier de hachage DBM sur le disque local. </p><p> L'utilisation de shmht:logs/ssl_scache(512000) crée un cache dans un segment de mémoire partagée </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note: shmht contre shmcb"><tr><td valign="top" align="center" rowspan="2" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">shmht contre shmcb</th></tr><tr><td valign="top" align="left"><p> shmht : recoure à une table de hachage pour cacher les informations du protocole SSL dans la mémoire partagée. </p><p> shmcb : recoure à un tampon cyclique pour cacher les informations du protocole SSL dans la mémoire partagée. </p></td></tr></table></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note: N.B. : "><tr><td valign="top" align="center" rowspan="2" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">N.B. : </th></tr><tr><td valign="top" align="left"><p> tous les OS/plates-formes ne supportent pas de créer des tables de hachage dans la mémoire partagée. Donc, il faut utiliser dbm:logs/ssl_scache à la place. </p></td></tr></table></div></div><div class="sect3" lang="fr"><div class="titlepage"><div><div><h4 class="title"><a name="N10578"></a>6.7.2. Vérification du cache de session SSL</h4></div></div><div></div></div><p> Pour vérifier si le cache de session SSL fonctionne correctement, vous devez utiliser la commande <span><strong class="command">openssl</strong></span> avec l'option <code class="option">-reconnect</code> comme suit : </p><pre class="screen"> # openssl s_client -connect your.server.dom:443 -state -reconnect CONNECTED(00000003) ....... ....... Reused, TLSv1/SSLv3, Cipher is EDH-RSA-DES-CBC3-SHA SSL-Session: ..... Reused, TLSv1/SSLv3, Cipher is EDH-RSA-DES-CBC3-SHA SSL-Session: ..... Reused, TLSv1/SSLv3, Cipher is EDH-RSA-DES-CBC3-SHA SSL-Session: ..... Reused, TLSv1/SSLv3, Cipher is EDH-RSA-DES-CBC3-SHA SSL-Session: ..... Reused, TLSv1/SSLv3, Cipher is EDH-RSA-DES-CBC3-SHA SSL-Session: ..... </pre><p> <code class="option">-reconnect</code> oblige le s_client à se connecter au serveur 5 fois de suite en utilisant la même ID de session SSL. Comme vous le voyez plus haut, vous devriez voir cinq tentatives de réutilisation de la même ID de session. </p></div></div></div><div class="navfooter"><hr><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="ar01s05.html">Précédent</a> </td><td align="center" width="20%"> </td><td align="right" width="40%"> <a accesskey="n" href="apa.html">Suivant</a></td></tr><tr><td valign="top" align="left" width="40%">5. Administration du serveur WebDAV </td><td align="center" width="20%"><a accesskey="h" href="index.html">Sommaire</a></td><td valign="top" align="right" width="40%"> A. Outils d'évaluation de performances HTTP/HTTPS</td></tr></table></div></body></html>