{"id":590,"date":"2013-03-11T22:24:55","date_gmt":"2013-03-11T21:24:55","guid":{"rendered":"https:\/\/blog.thju.de\/?page_id=590"},"modified":"2013-03-29T12:33:42","modified_gmt":"2013-03-29T11:33:42","slug":"server-name-indication","status":"publish","type":"page","link":"https:\/\/www.thju.de\/en\/anleitungen\/server-name-indication\/","title":{"rendered":"Server Name Indication (SNI)"},"content":{"rendered":"<p>Diese Anleitung beschreibt, wie man \u201enamensbasierte virtuelle Hosts\u201c gemeinsam mit\u00a0<abbr title=\"Secure Sockets Layer\">SSL<\/abbr>\u00a0nutzen kann. Sie erfordert einen Apache Webserver auf dem ModSSL eingerichtet ist. Wie man so etwas macht kann man z.B.\u00a0<a title=\"http:\/\/wiki.ubuntuusers.de\/Apache\/SSL\" href=\"http:\/\/wiki.ubuntuusers.de\/Apache\/SSL\" rel=\"nofollow\">hier<\/a>\u00a0nachlesen. Die Aussage, das nur 1 Zertifikat pro IP funktioniert ist mittlerweile, dank\u00a0<a title=\"http:\/\/de.wikipedia.org\/wiki\/Server_Name_Indication\" href=\"http:\/\/de.wikipedia.org\/wiki\/Server_Name_Indication\" rel=\"nofollow\">SNI<\/a>, veraltet.<\/p>\n<h2 id=\"voraussetzungen_fuer_sni\">Voraussetzungen f\u00fcr SNI<\/h2>\n<h3 id=\"server\">Server<\/h3>\n<div>\n<ul>\n<li>\n<div>Apache 2.2.12 oder neuer<\/div>\n<\/li>\n<li>\n<div>OpenSSL 0.9.8f oder neuer<\/div>\n<\/li>\n<\/ul>\n<p>Hinweis: Es k\u00f6nnen auch andere Webserver SNI. Hier geht es aber um die Apache Konfiguration.<\/p>\n<\/div>\n<h4 id=\"ubuntu\">Ubuntu<\/h4>\n<div>\n<p>Bei der Ubuntu-Version 06.06 LTS ist die Apache Version zu alt. Bei Ubuntu 10.04 LTS sind die Versionen neu genug.<\/p>\n<\/div>\n<h3 id=\"clients_browser\">Clients (Browser)<\/h3>\n<div>\n<ul>\n<li>\n<div>Mozilla Firefox 2.0 oder neuer<\/div>\n<\/li>\n<li>\n<div>Opera 8.0 oder neuer (mit TLS 1.1 eingeschaltet)<\/div>\n<\/li>\n<li>\n<div>Internet Explorer 7.0 oder neuer (nur unter Vista, nicht unter Windows XP)<\/div>\n<\/li>\n<li>\n<div>Google Chrome<\/div>\n<\/li>\n<li>\n<div>Safari 3.2.1 unter Mac\u00a0<abbr title=\"Operating System\">OS<\/abbr>\u00a0X 10.5.6 oder neuer<\/div>\n<\/li>\n<\/ul>\n<h2 id=\"zertifikate_erstellen\">Zertifikate erstellen<\/h2>\n<div>\n<ol>\n<li>\n<div>\n<p>Zuerst muss mit OpenSSL ein privater Schl\u00fcssel erstellt werden.<\/p>\n<pre>openssl genrsa -out private.key 4096<\/pre>\n<\/div>\n<\/li>\n<li>\n<div>\n<p>Danach muss ein\u00a0<em>certificate request<\/em>\u00a0erstellt werden. Beim \u201eCommon Name\u201c muss der Domain-Name eingetragen werden.<\/p>\n<pre>openssl req -new -key private.key -out crt-request.csr<\/pre>\n<\/div>\n<\/li>\n<li>\n<div>Der Inhalt von der Datei \u201ecrt-request.csr\u201c muss der\u00a0<a title=\"http:\/\/en.wikipedia.org\/wiki\/Certificate_authority\" href=\"http:\/\/en.wikipedia.org\/wiki\/Certificate_authority\" rel=\"nofollow\">CA<\/a>\u00a0z.B.\u00a0<a title=\"https:\/\/cacert.org\" href=\"https:\/\/cacert.org\/\" rel=\"nofollow\">CaCert<\/a>\u00a0\u00fcbergeben werden.<\/div>\n<\/li>\n<li>\n<div>Die Antwort von der CA ist das Zertifikat, welches vom Browser \u00fcberpr\u00fcft wird. Dies muss z.B. als public.crt gespeichert werden.<\/div>\n<\/li>\n<\/ol>\n<h2 id=\"apache_-_virtual_hosts\">Apache &#8211; Virtual Hosts<\/h2>\n<div><\/div>\n<h3 id=\"grundlagen\">Grundlagen<\/h3>\n<div>\n<p>Bei Virtuellen Hosts ist 1 PC mit 1 IP f\u00fcr mehrere Domains zust\u00e4ndig. Der Browser sagt dem Webserver, welche Domain der Nutzer anschauen m\u00f6chte. Der Webserver liefert dann die entsprechende Seite aus. Dies hat vor SNI nur mit einem\u00a0<abbr title=\"Secure Sockets Layer\">SSL<\/abbr>-Zertifikat funktioniert, da der Browser erst nach dem Aufbau der verschl\u00fcsselten Verbindung die gew\u00fcnschte Domain \u00fcbertragen hat. Bei SNI wird die gew\u00fcnschte Domain schon beim Verbindungsaufbau mit \u00fcbergeben.<\/p>\n<\/div>\n<h3 id=\"konfiguration\">Konfiguration<\/h3>\n<div>\n<p>Es muss f\u00fcr jede Domain ein Zertifikat angelegt werden. Die Parameter\u00a0<em>SSLCertificateFile<\/em>,\u00a0<em>SSLCertificateKeyFile<\/em>\u00a0und\u00a0<em>SSLCACertificateFile<\/em>\u00a0werden unterhalb von\u00a0<em>virtualhost<\/em>\u00a0konfiguriert. Somit kann f\u00fcr jeden VirtualHost ein eigenes Zertifikat benutzt werden.<\/p>\n<\/div>\n<h4 id=\"beispiel-konfiguration_mit_2_domains\">Beispiel-Konfiguration mit 2 Domains<\/h4>\n<p>&nbsp;<\/p>\n<\/div>\n<\/div>\n<pre><code>\r\nNameVirtualHost *:80\r\nNameVirtualHost *:443<\/code>\r\n\r\n#Domain 1\r\n\r\nServerName example.com\r\nServerAlias www.example.com\r\nDocumentRoot \/var\/www\/example.com\/\r\nServerName example.com\r\nServerAlias www.example.com\r\nDocumentRoot \/var\/www\/example.com\/\r\nSSLEngine On\r\nSSLCertificateFile \/etc\/ssl\/private\/example.com.crt\r\nSSLCertificateKeyFile \/etc\/ssl\/private\/example.com.key\r\nSSLCACertificateFile \/etc\/ssl\/certs\/cacert.org.pem\r\nSSLVerifyClient none\r\n\r\n#Domain 2\r\n\r\nServerName example.org\r\nServerAlias www.example.org\r\nDocumentRoot \/var\/www\/example.org\/\r\nServerName example.org\r\nServerAlias www.example.org\r\nDocumentRoot \/var\/www\/example.org\/\r\nSSLEngine On\r\nSSLCertificateFile \/etc\/ssl\/private\/example.org.crt\r\nSSLCertificateKeyFile \/etc\/ssl\/private\/example.org.key\r\nSSLCACertificateFile \/etc\/ssl\/certs\/cacert.org.pem\r\nSSLVerifyClient none\r\n\r\n<\/code><\/pre>\n<p>&nbsp;<\/p>\n<h3 id=\"wildcard_zertifikate\">Wildcard Zertifikate<\/h3>\n<div>\n<p>Bei einem Wildcard Zertifikat ist der \u201eCommon Name\u201c nicht nur eine Domain (z.B.:\u00a0<a title=\"http:\/\/www.thju.de\" href=\"http:\/\/www.thju.de\/\" rel=\"nofollow\">www.thju.de<\/a>) sondern beinhaltet alle SubDomains. Der \u201eCommon Name\u201c beginnt mit einem * (z.B.: \u201e*.thju.de\u201c). Das Zertifikat funktioniert leider nicht f\u00fcr die eigentliche Domain (<a title=\"https:\/\/thju.de\" href=\"https:\/\/thju.de\/\" rel=\"nofollow\">https:\/\/thju.de<\/a>). Dies kann mit einem 2. Zertifikat oder mit einer Weiterleitung zu\u00a0<a title=\"https:\/\/www.thju.de\" href=\"https:\/\/www.thju.de\/\" rel=\"nofollow\">https:\/\/www.thju.de<\/a>\u00a0umgangen werden.<\/p>\n<p>Die Zertifizierungsstelle muss die Wildcard Zertifikate unterst\u00fctzten.\u00a0<a title=\"https:\/\/cacert.org\" href=\"https:\/\/cacert.org\/\" rel=\"nofollow\">CaCert<\/a>\u00a0unterst\u00fctzt solche Zertifikate.<\/p>\n<h2 id=\"fehlerprobleme\">Fehler \/ Probleme<\/h2>\n<h3 id=\"es_werden_falsche_zertifikate_ausgeliefert\">Es werden falsche Zertifikate ausgeliefert<\/h3>\n<div>\n<p>Beim Testen\/Rumspielen mit unterschiedlichen Zertifikaten hatte ich das Problem, das falsche bzw. Zertifikate von vorherigen Konfigurationen ausgeliefert wurden. Wenn man der Meinung ist, das alles richtig Eingestellt ist und trotzdem noch Flasche Zertifikate ausgeliefert werden, sollte die folgenden 3 Dinge tun.<\/p>\n<ol>\n<li>\n<div>Browser Neustarten<\/div>\n<\/li>\n<li>\n<div>Apache Webserver neu Starten<\/div>\n<\/li>\n<li>\n<div>Den kompletten Server neu Starten (Bei mir kam es vor, das nach Schritt 1+2 immer noch falsche Zertifikate ausgeliefert wurden. Ein Neustart des Servers hat da geholfen. Vermutlich lag das an einem\u00a0<abbr title=\"Secure Sockets Layer\">SSL<\/abbr>-Cache oder sonstigem Caching)<\/div>\n<\/li>\n<li>\n<div>Den Client-PC (Browser) Neustarten (Cache k\u00f6nnen Nerven)<\/div>\n<\/li>\n<\/ol>\n<\/div>\n<h2 id=\"quellen\">Quellen<\/h2>\n<div>\n<p><a title=\"http:\/\/de.wikipedia.org\/wiki\/Server_Name_Indication\" href=\"http:\/\/de.wikipedia.org\/wiki\/Server_Name_Indication\" rel=\"nofollow\">http:\/\/de.wikipedia.org\/wiki\/Server_Name_Indication<\/a><br \/>\n<a title=\"http:\/\/wiki.apache.org\/httpd\/NameBasedSSLVHostsWithSNI\" href=\"http:\/\/wiki.apache.org\/httpd\/NameBasedSSLVHostsWithSNI\" rel=\"nofollow\">http:\/\/wiki.apache.org\/httpd\/NameBasedSSLVHostsWithSNI<\/a><br \/>\n<a title=\"http:\/\/httpd.apache.org\/docs\/2.2\/de\/vhosts\/name-based.html\" href=\"http:\/\/httpd.apache.org\/docs\/2.2\/de\/vhosts\/name-based.html\" rel=\"nofollow\">http:\/\/httpd.apache.org\/docs\/2.2\/de\/vhosts\/name-based.html<\/a><\/p>\n<p>Hinweis: Teile von dieser Seite sind selbst geschrieben, andere Teile sind aus den genannten Quellen kopiert oder \u00fcbersetzt.<br \/>\nPS: Die selbstgeschrieben Teile sind an der schlechten Grammatik und an den vielen Rechtschreibfehlern zu erkennen.<\/p>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Diese Anleitung beschreibt, wie man \u201enamensbasierte virtuelle Hosts\u201c gemeinsam mit\u00a0SSL\u00a0nutzen kann. Sie erfordert einen Apache Webserver auf dem ModSSL eingerichtet ist. Wie man so etwas macht kann man z.B.\u00a0hier\u00a0nachlesen. Die Aussage, das nur 1 Zertifikat pro IP funktioniert ist mittlerweile, &hellip;<\/p>\n<p class=\"read-more\"> <a class=\"more-link\" href=\"https:\/\/www.thju.de\/en\/anleitungen\/server-name-indication\/\"> <span class=\"screen-reader-text\">Server Name Indication (SNI)<\/span> Read More &raquo;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":587,"menu_order":0,"comment_status":"open","ping_status":"open","template":"full-width-page.php","meta":{"footnotes":""},"class_list":["post-590","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.thju.de\/en\/wp-json\/wp\/v2\/pages\/590","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.thju.de\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.thju.de\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.thju.de\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.thju.de\/en\/wp-json\/wp\/v2\/comments?post=590"}],"version-history":[{"count":0,"href":"https:\/\/www.thju.de\/en\/wp-json\/wp\/v2\/pages\/590\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/www.thju.de\/en\/wp-json\/wp\/v2\/pages\/587"}],"wp:attachment":[{"href":"https:\/\/www.thju.de\/en\/wp-json\/wp\/v2\/media?parent=590"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}