{"id":198,"date":"2016-01-22T15:47:40","date_gmt":"2016-01-22T14:47:40","guid":{"rendered":"http:\/\/www.jacquescortes.fr\/blog\/?p=198"},"modified":"2016-01-22T16:01:33","modified_gmt":"2016-01-22T15:01:33","slug":"sni-mutualisation-de-certificats-ssltls-meme-ip","status":"publish","type":"post","link":"http:\/\/www.jacquescortes.fr\/blog\/2016\/01\/sni-mutualisation-de-certificats-ssltls-meme-ip\/","title":{"rendered":"SNI : mutualisation de certificats SSL\/TLS sur une m\u00eame IP"},"content":{"rendered":"<p><a href=\"http:\/\/www.jacquescortes.fr\/blog\/2016\/01\/sni-mutualisation-de-certificats-ssltls-meme-ip\/secured-web-browsing\/\" rel=\"attachment wp-att-200\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-200\" src=\"http:\/\/www.jacquescortes.fr\/blog\/wp-content\/uploads\/2016\/01\/https-300x225.jpg\" alt=\"https\" width=\"300\" height=\"225\" srcset=\"http:\/\/www.jacquescortes.fr\/blog\/wp-content\/uploads\/2016\/01\/https-300x225.jpg 300w, http:\/\/www.jacquescortes.fr\/blog\/wp-content\/uploads\/2016\/01\/https.jpg 400w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Les certificats SSL\/TLS (<a href=\"https:\/\/fr.wikipedia.org\/wiki\/X.509\" target=\"_blank\">X.509<\/a>) se g\u00e9n\u00e9ralisant et les IPs publiques \u00e9tant co\u00fbteuses, on peut chercher \u00e0 servir plusieurs noms de domaine avec une seule IP.<br \/>\nPour r\u00e9soudre ce probl\u00e8me, l&rsquo;extension SNI a \u00e9t\u00e9 ajout\u00e9e au protocole TLS, ainsi qu&rsquo;au protocole SSL \u00e0 partir de la v3 (<a href=\"http:\/\/www.ietf.org\/rfc\/rfc4366.txt\" target=\"_blank\">RFC 4366<\/a>).<\/p>\n<h1>SNI : Server Name Indication<\/h1>\n<p>&nbsp;<\/p>\n<h2>D\u00e9finition (Wikipedia)<\/h2>\n<p><b><a href=\"https:\/\/fr.wikipedia.org\/wiki\/Server_Name_Indication\" target=\"_blank\">Server Name Indication<\/a><\/b> (<b>SNI<\/b>), qui peut se traduire par \u00ab\u00a0<b>indication du nom du serveur<\/b>\u00a0\u00bb, est une extension du protocole <a title=\"Transport Layer Security\" href=\"https:\/\/fr.wikipedia.org\/wiki\/Transport_Layer_Security\">TLS<\/a>. Avec l&rsquo;extension SNI, le client indique le nom d&rsquo;h\u00f4te (hostname) avec lequel il tente de d\u00e9marrer une n\u00e9gociation TLS. Cela permet au serveur de pr\u00e9senter plusieurs certificats pour la m\u00eame adresse IP (mais des noms d&rsquo;h\u00f4te diff\u00e9rents), et donc de mutualiser des h\u00e9bergements pour des sites s\u00e9curis\u00e9s en https.<\/p>\n<p>Tous les navigateurs web ne supportent pas le SNI. Lorsque le navigateur ne supporte pas le SNI, le serveur fournit le certificat par d\u00e9faut, et un avertissement au sujet du certificat se produit donc le plus souvent.<\/p>\n<h2>Exemple concret<\/h2>\n<p>Imaginons que nous disposions d&rsquo;un tenant Openstack avec un nombre limit\u00e9 d&rsquo;adresses IP publiques.<br \/>\nPlusieurs solutions s&rsquo;offrent \u00e0 nous :<\/p>\n<ul>\n<li>les\u00a0sites ont tous un nom qui se termine par le m\u00eame domaine (*.domaine.fr)<br \/>\n=&gt; Dans ce cas, on peut utiliser un certificat Wildcard ou OmniDomaine<\/li>\n<li>les sites ont des noms divers et on a une\u00a0seule adresse IP<br \/>\n=&gt; Dans ce cas, on peut utiliser un certificats Multiples Sites (SSL SAN)<br \/>\n=&gt; Pour \u00e7a, il faut connaitre l&rsquo;ensemble des noms de domaine \u00e0 la cr\u00e9ation du certificat qui sera partag\u00e9<\/li>\n<li>les sites ont des noms divers, on a une\u00a0seule adresse IP et on met en place le SNI<br \/>\n=&gt; Dans ce cas, chaque domaine pourra avoir son propre certificat<br \/>\n=&gt; Il faut v\u00e9rifier la probl\u00e9matique d&rsquo;incompatibilit\u00e9, mais elle est de plus en plus faible avec le temps<\/li>\n<\/ul>\n<h2>Probl\u00e9matique<\/h2>\n<p>Pour que le SNI fonctionne, il faut d&rsquo;abord avoir un serveur compatible (par exemple Apache pour un serveur web, HAProxy pour un load balancer), le mettre en place et le configurer bien sur, mais aussi avoir des clients (navigateurs) compatibles.<br \/>\nC\u00f4t\u00e9 serveur, au pire une mont\u00e9e de version r\u00e8gle le probl\u00e8me.<br \/>\nC\u00f4t\u00e9 client, on exclue les plus vieux navigateurs et\/ou les plus vieux syst\u00e8mes d&rsquo;exploitations.<\/p>\n<h2>Compatibilit\u00e9<\/h2>\n<ul>\n<li>Navigateurs compatibles:\n<ul>\n<li>Internet Explorer 7+ ou plus r\u00e9cent, sur Windows Vista ou plus r\u00e9cent. Ne fonctionne pas sur Windows XP et Internet Explorer 8<\/li>\n<li>Mozilla Firefox 2+<\/li>\n<li>Opera 8+\u00a0(le protocole TLS 1.1 doit \u00eatre mis en place)<\/li>\n<li>Opera Mobile, la version doit \u00eatre au moins 10.1 beta sur Android<\/li>\n<li>Google Chrome\u00a0(Windows Vista ou plus r\u00e9cent, Windows XP n\u00e9cessite Chrome 6+, OS X 10.5.7 ou + n\u00e9cessite Chrome 5.0.342.1 ou +)<\/li>\n<li>Konqueror\/KDE 4.7+<\/li>\n<li>Safari 3.2.1+ sur Mac OS X 10.5.6+<\/li>\n<li>Safari sous Vista ou Seven<\/li>\n<li>MobileSafari sur iOS 4.0+<\/li>\n<li>WindowsvMobile 7+<\/li>\n<li>BlackBerry OS 7.2+<\/li>\n<li>Android (navigateur standard) 3+ pour tablette et 4+ pour smartphone<\/li>\n<li>MicroB sur Maemo<\/li>\n<li>wget 1.14+<\/li>\n<li>curl 7.18.1+<\/li>\n<\/ul>\n<\/li>\n<li>Serveurs compatibles:\n<ul>\n<li>Microsoft IIS8<\/li>\n<li>OpenSSL 0.9.8f (0.9.8k recommand\u00e9)<\/li>\n<li>Apache 2.2.12+\u00a0(doit utiliser le mod_ssl)<\/li>\n<li>Apache Traffic Server 3.2.0+<\/li>\n<li>Cherokee \u00a0(avec\u00a0support TLS impl\u00e9ment\u00e9)<\/li>\n<li>lighthttpd 1.4.24+<\/li>\n<li>Apache Tomcat sur\u00a0Java 7+<\/li>\n<li>Nginx (avec OpenSSL et\u00a0support SNI)<\/li>\n<li>F5 Networks Local Traffic Manager\u00a011.1+<\/li>\n<li>G-WAN Web app. Server (avec OpenSSL et support SNI<\/li>\n<li>LiteSpeed 4.1+<\/li>\n<li>Pound 2.6+<\/li>\n<li>Saetta Web Server via OpenSSL<\/li>\n<li>Citrix NetScaler 9.2+<\/li>\n<li>HAProxy 1.5+<\/li>\n<li>Qt 4.8+<\/li>\n<li>Java 7+<\/li>\n<li>Python\u00a02.7.9+ pour les 2.x et 3.2+ pour les 3.x (dans les modules\u00a0<code>ssl<\/code>, <code>urllib<\/code>\u00a0et\u00a0<code>httplib<\/code>)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; Les certificats SSL\/TLS (X.509) se g\u00e9n\u00e9ralisant et les IPs publiques \u00e9tant co\u00fbteuses, on peut chercher \u00e0 servir plusieurs noms de domaine avec une seule IP. Pour r\u00e9soudre ce probl\u00e8me, l&rsquo;extension SNI a \u00e9t\u00e9 ajout\u00e9e au protocole TLS, ainsi qu&rsquo;au protocole SSL \u00e0 partir de la v3 (RFC 4366). SNI : Server Name Indication &nbsp; [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":200,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[16],"tags":[],"series":[],"class_list":{"0":"post-198","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-securite","8":"czr-hentry"},"_links":{"self":[{"href":"http:\/\/www.jacquescortes.fr\/blog\/wp-json\/wp\/v2\/posts\/198","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.jacquescortes.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.jacquescortes.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.jacquescortes.fr\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.jacquescortes.fr\/blog\/wp-json\/wp\/v2\/comments?post=198"}],"version-history":[{"count":7,"href":"http:\/\/www.jacquescortes.fr\/blog\/wp-json\/wp\/v2\/posts\/198\/revisions"}],"predecessor-version":[{"id":206,"href":"http:\/\/www.jacquescortes.fr\/blog\/wp-json\/wp\/v2\/posts\/198\/revisions\/206"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/www.jacquescortes.fr\/blog\/wp-json\/wp\/v2\/media\/200"}],"wp:attachment":[{"href":"http:\/\/www.jacquescortes.fr\/blog\/wp-json\/wp\/v2\/media?parent=198"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.jacquescortes.fr\/blog\/wp-json\/wp\/v2\/categories?post=198"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.jacquescortes.fr\/blog\/wp-json\/wp\/v2\/tags?post=198"},{"taxonomy":"series","embeddable":true,"href":"http:\/\/www.jacquescortes.fr\/blog\/wp-json\/wp\/v2\/series?post=198"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}