{"id":97,"date":"2010-09-08T23:18:44","date_gmt":"2010-09-08T21:18:44","guid":{"rendered":"http:\/\/mmed.roulleau.net\/?p=97"},"modified":"2010-09-08T23:18:44","modified_gmt":"2010-09-08T21:18:44","slug":"apache-ssl-et-hotes-virtuels","status":"publish","type":"post","link":"https:\/\/mmed.roulleau.net\/?p=97","title":{"rendered":"Apache, SSL et h\u00f4tes virtuels"},"content":{"rendered":"<p>J&rsquo;ai fr\u00e9quemment lu sur Internet qu&rsquo;utiliser les h\u00f4tes virtuels, en partageant le m\u00eame couple IP\/port par Apache sur SSL \u00e9tait impossible.<\/p>\n<p>La raison avanc\u00e9e est simple : les h\u00f4tes virtuels utilisent un champ de l&rsquo;ent\u00eate de la requ\u00eate HTTP pour d\u00e9terminer quel est le site concern\u00e9 par la demande. Le probl\u00e8me qui g\u00eane le bon fonctionnement des h\u00f4tes virtuels, est que cette ent\u00eate est chiffr\u00e9e puisque l&rsquo;envoi des ent\u00eates intervient apr\u00e8s la pr\u00e9sentation des certificats. Donc impossible d&rsquo;identifier le site avant d&rsquo;avoir envoy\u00e9 les certificats, alors que cet envoi de certificats requiert d&rsquo;avoir choisi le site. La boucle est boucl\u00e9e, les d\u00e9butants arr\u00eatent de chercher sur les forums, et les achats d&rsquo;IP suppl\u00e9mentaires augmentent chez les loueurs de serveurs d\u00e9di\u00e9s.<\/p>\n<p>C&rsquo;\u00e9tait \u00e0 moiti\u00e9 vrai, c&rsquo;est compl\u00e8tement faux maintenant. C&rsquo;est le probl\u00e8me d&rsquo;Internet : on revient rarement en arri\u00e8re corriger un vieux message sur les forums. Et les moteurs de recherche \u00e9tant ce qu&rsquo;ils sont, de vieilles pages plus du tout actuelles peuvent tr\u00e8s bien remonter en haut des recherches.\u00a0 Mais je diverge.<\/p>\n<p>Donc malgr\u00e9 ce que vous pouvez lire, Apache est maintenant tout \u00e0 fait capable de g\u00e9rer les hotes virtuels en SSL.<br \/>\nComment ? Au choix :<br \/>\n1- Apache (du moins en version 2.3 ou dans la branche 2.2 depuis 2.2.12 gr\u00e2ce \u00e0 un backport) supporte les extensions SNI, qui permettent au navigateur de pr\u00e9senter le nom de domaine avant d&rsquo;\u00e9tablir la connexion chiffr\u00e9e. L&rsquo;usage de cette extension requiert un navigateur compatible, ce qui inclut tous les navigateurs r\u00e9cents mais exclut le diabolique IE6 (encore et toujours lui). C&rsquo;est une solution id\u00e9ale si vous \u00eates pr\u00eats \u00e0 passer outre ce vieux navigateur qui n&rsquo;a que trop servi.<br \/>\n2- En utilisant le plus r\u00e9cent TLS, au lieu de SSL, avec le probl\u00e8me \u00e9tendu de support par les navigateurs. Au passage, c&rsquo;est la solution d&rsquo;avenir, mais il vaut mieux l&rsquo;oublier en attendant qu&rsquo;il soit plus r\u00e9pandu.<br \/>\n3- Avec une solution plus vieille, qui a ses limitations, mais qui a fait ses preuves dans certains cas particuliers : un seul et m\u00eame certificat pour tous les sites. On comprend vite qu&rsquo;avec cette m\u00e9thode, le probl\u00e8me \u00e9nonc\u00e9 en d\u00e9but d&rsquo;article n&rsquo;en est plus un. Alors que de base -pour une s\u00e9curit\u00e9 accrue- les certificats SSL sont sign\u00e9s \u00e0 destination d&rsquo;un seul et unique nom de domaine, il existe donc des variantes permettant les domaines multiples. Vous avez au choix les co\u00fbteux certificats wildcard ou l&rsquo;utilisation de l&rsquo;extenstion altName. Je vais encore r\u00e9duire le spectre des solutions et choisir de parler ici du \u00ab\u00a0altName\u00a0\u00bb, qui nous autorise \u00e0 d\u00e9terminer des noms alternatifs pour notre serveur. Je n&rsquo;ai pas trouv\u00e9 directement d&rsquo;aides\u00a0 sur Internet couvrant ce sujet du d\u00e9but \u00e0 la fin avec des commandes simples qui se suffisent \u00e0 elles-m\u00eames. D&rsquo;o\u00f9 ceci :<\/p>\n<h1>Un rapide pas-\u00e0-pas d\u00e9taill\u00e9<\/h1>\n<p>Placez vous dans un r\u00e9pertoire de travail (que je vous laisse cr\u00e9er). On commence par une g\u00e9n\u00e9ration de cl\u00e9s 1024 bits si vous n&rsquo;en avez pas d\u00e9j\u00e0 une :<\/p>\n<pre>openssl genrsa -out server.key 1024<\/pre>\n<p>On copie ensuite le fichier de configuration d&rsquo;openssl :<\/p>\n<pre>cp \/etc\/ssl\/openssl.cnf .<\/pre>\n<p>On \u00e9dite ce fichier. Dans la section <strong>[req]<\/strong> on ajoute (ou d\u00e9commente) :<\/p>\n<pre>[req]\nreq_extensions = v3_req<\/pre>\n<p>Dans la section<strong> [v3_req]<\/strong>, on ajoute alors la liste des domaines alternatifs sous cette forme :<\/p>\n<pre>subjectAltName= DNS:domaine1.org, DNS:autrealternative.domaine1.org, DNS:encoreunautre.com<\/pre>\n<p>Maintenant on g\u00e9n\u00e8re une requ\u00eate de signature. Si vous \u00eates riche, vous pouvez utiliser le fichier .csr ainsi g\u00e9n\u00e9r\u00e9 pour faire certifier votre domaine aupr\u00e8s d&rsquo;un organisme de confiance comme Thawte ou Verisign. Cela \u00e9vitera les messages d&rsquo;avertissement des navigateurs se connectant \u00e0 votre site s\u00e9curis\u00e9. Voici la commande pour cr\u00e9er cette requ\u00eate de signature :<\/p>\n<pre>openssl req -new -out server.csr -key server.key -config openssl.cnf<\/pre>\n<p>Au lieu d&rsquo;envoyer votre demande chez les am\u00e9ricains, si vous \u00eates pr\u00e8s de vos sous et\/ou dans un cadre amateur, ne vous g\u00eanez pas pour auto-signer votre certificat :<\/p>\n<pre>openssl x509 -req -in server.csr -out server.crt -signkey server.key -extfile openssl.cnf -extensions v3_req<\/pre>\n<p>Voil\u00e0, vous avez ainsi dans votre r\u00e9pertoire de travail deux fichiers (la cl\u00e9 et le certificat) qui sont suffisants pour faire tourner votre Apache en mode s\u00e9curis\u00e9 !<br \/>\nN&rsquo;oubliez pas d&rsquo;activer mod_ssl dans Apache et d&rsquo;ajouter dans votre configuration d&rsquo;h\u00f4tes virtuels HTTPS les lignes suivantes :<\/p>\n<pre>SSLEngine on\nSSLCertificateFile &lt;chemin&gt;\/server.crt\nSSLCertificateKeyFile &lt;chemin&gt;\/server.key<\/pre>\n<p>Avant de partir, prenez connaissances des limitations de cette solution :\u00a0 d&rsquo;une part cette extension n&rsquo;est pas reconnue par certains tr\u00e8s vieux navigateurs (mais, puisque m\u00eame l&rsquo;horrible IE6 le fait, on va arr\u00eater les chipotages et remettre au placard Netscape&#8230;), et d&rsquo;autre part tous vos sites alternatifs sont pr\u00e9sents dans le certificat en clair, ce qui veut dire que n&rsquo;importe qui \u00e9tablissant la connexion SSL, peut savoir que ces sites existent sur votre machine.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>J&rsquo;ai fr\u00e9quemment lu sur Internet qu&rsquo;utiliser les h\u00f4tes virtuels, en partageant le m\u00eame couple IP\/port par Apache sur SSL \u00e9tait impossible. La raison avanc\u00e9e est simple : les h\u00f4tes virtuels utilisent un champ de l&rsquo;ent\u00eate de la requ\u00eate HTTP pour d\u00e9terminer quel est le site concern\u00e9 par la demande. Le probl\u00e8me qui g\u00eane le bon [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[8],"tags":[11,19,45],"_links":{"self":[{"href":"https:\/\/mmed.roulleau.net\/index.php?rest_route=\/wp\/v2\/posts\/97"}],"collection":[{"href":"https:\/\/mmed.roulleau.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mmed.roulleau.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mmed.roulleau.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mmed.roulleau.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=97"}],"version-history":[{"count":0,"href":"https:\/\/mmed.roulleau.net\/index.php?rest_route=\/wp\/v2\/posts\/97\/revisions"}],"wp:attachment":[{"href":"https:\/\/mmed.roulleau.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=97"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mmed.roulleau.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=97"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mmed.roulleau.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=97"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}