Server Name Indication (SNI)

Diese Anleitung beschreibt, wie man „namensbasierte virtuelle Hosts“ gemeinsam mit SSL nutzen kann. Sie erfordert einen Apache Webserver auf dem ModSSL eingerichtet ist. Wie man so etwas macht kann man z.B. hier nachlesen. Die Aussage, das nur 1 Zertifikat pro IP funktioniert ist mittlerweile, dank SNI, veraltet.

Voraussetzungen für SNI

Server

  • Apache 2.2.12 oder neuer
  • OpenSSL 0.9.8f oder neuer

Hinweis: Es können auch andere Webserver SNI. Hier geht es aber um die Apache Konfiguration.

Ubuntu

Bei der Ubuntu-Version 06.06 LTS ist die Apache Version zu alt. Bei Ubuntu 10.04 LTS sind die Versionen neu genug.

Clients (Browser)

  • Mozilla Firefox 2.0 oder neuer
  • Opera 8.0 oder neuer (mit TLS 1.1 eingeschaltet)
  • Internet Explorer 7.0 oder neuer (nur unter Vista, nicht unter Windows XP)
  • Google Chrome
  • Safari 3.2.1 unter Mac OS X 10.5.6 oder neuer

Zertifikate erstellen

  1. Zuerst muss mit OpenSSL ein privater Schlüssel erstellt werden.

  2. Danach muss ein certificate request erstellt werden. Beim „Common Name“ muss der Domain-Name eingetragen werden.

  3. Der Inhalt von der Datei „crt-request.csr“ muss der CA z.B. CaCert übergeben werden.
  4. Die Antwort von der CA ist das Zertifikat, welches vom Browser überprüft wird. Dies muss z.B. als public.crt gespeichert werden.

Apache – Virtual Hosts

Grundlagen

Bei Virtuellen Hosts ist 1 PC mit 1 IP für mehrere Domains zuständig. Der Browser sagt dem Webserver, welche Domain der Nutzer anschauen möchte. Der Webserver liefert dann die entsprechende Seite aus. Dies hat vor SNI nur mit einem SSL-Zertifikat funktioniert, da der Browser erst nach dem Aufbau der verschlüsselten Verbindung die gewünschte Domain übertragen hat. Bei SNI wird die gewünschte Domain schon beim Verbindungsaufbau mit übergeben.

Konfiguration

Es muss für jede Domain ein Zertifikat angelegt werden. Die Parameter SSLCertificateFileSSLCertificateKeyFile und SSLCACertificateFile werden unterhalb von virtualhost konfiguriert. Somit kann für jeden VirtualHost ein eigenes Zertifikat benutzt werden.

Beispiel-Konfiguration mit 2 Domains

 

 

Wildcard Zertifikate

Bei einem Wildcard Zertifikat ist der „Common Name“ nicht nur eine Domain (z.B.: www.thju.de) sondern beinhaltet alle SubDomains. Der „Common Name“ beginnt mit einem * (z.B.: „*.thju.de“). Das Zertifikat funktioniert leider nicht für die eigentliche Domain (https://thju.de). Dies kann mit einem 2. Zertifikat oder mit einer Weiterleitung zu https://www.thju.de umgangen werden.

Die Zertifizierungsstelle muss die Wildcard Zertifikate unterstützten. CaCert unterstützt solche Zertifikate.

Fehler / Probleme

Es werden falsche Zertifikate ausgeliefert

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.

  1. Browser Neustarten
  2. Apache Webserver neu Starten
  3. 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 SSL-Cache oder sonstigem Caching)
  4. Den Client-PC (Browser) Neustarten (Cache können Nerven)

Quellen

http://de.wikipedia.org/wiki/Server_Name_Indication
http://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI
http://httpd.apache.org/docs/2.2/de/vhosts/name-based.html

Hinweis: Teile von dieser Seite sind selbst geschrieben, andere Teile sind aus den genannten Quellen kopiert oder übersetzt.
PS: Die selbstgeschrieben Teile sind an der schlechten Grammatik und an den vielen Rechtschreibfehlern zu erkennen.

Schreibe einen Kommentar