jump to navigation

Apache, SSL und SNI July 20, 2008

Posted by Tobias Scherbaum in : Sysadmin , trackback

War es bisher nicht möglich, pro IP-Adresse eines Webservers mehr als ein Zertifikat zu verwenden, ermöglicht SNI nun genau das. In Apache ist der Patch noch nicht enthalten, aber unter anderem die Gentoo-Distribution ;) ermöglicht das Anwenden des Patches über das +sni USE-Flag.

Zunächst will also ein Apache mit integriertem SNI-Patch installiert werden:

# emerge apache -pv

These are the packages that would be merged, in order:

Calculating dependencies… done!
[ebuild R ] www-servers/apache-2.2.9 USE=”sni ssl -debug -doc -ldap (-selinux) -static -suexec -threads” APACHE2_MODULES=”[...]” 0 kB

Total: 1 package (1 reinstall), Size of downloads: 0 kB

Nachdem der Apache SNI nun unterstützt, ist noch die Direktive NameVirtualHost anzupassen. Zunächst aktivieren wir aber Unterstützung für SSL und den SSL_DEFAULT_VHOST.

# grep ^APACHE2_OPTS /etc/conf.d/apache2
APACHE2_OPTS=”-D SSL -D NAGIOS -D PHP5 -D SSL_DEFAULT_VHOST”

Da der SSL_DEFAULT_VHOST aktiviert ist, bietet es sich an die Direktive NameVirtualHost für den SSL-Port in der Konfigurationsdatei /etc/apache2/vhosts.d/00_default_ssl_vhost.conf zu setzen.

# vim /etc/apache2/vhosts.d/00_default_ssl_vhost.conf
NameVirtualHost *:443

Nun können analog zu “normalen” VirtualHosts auch VirtualHosts für SSL-Verbindungen angelegt werden. Einziger Wermutstropfen sind die Anforderungen an den Browser - so ist SNI erst in >=Firefox-2, >=Opera-8 und >=IE-7 möglich. Dies schränkt die Verwendbarkeit derzeit noch “etwas” ein, aber je nach Anforderung und Umgebung kann SNI (zukünftig) eine Option sein.

Nachtrag: Ein IE6 unter Windows XP SP3 tut auch, unter SP2 jedoch nicht.

Comments»

1. MartinNo Gravatar - 12. August 2008

Servus,

habe mit diversen Windows OS’en (Windows XP SP2 und SP3, Windows Vista, Windows 2000) und IE-Versionen (6, 7) rumprobiert mit SNI-Webseiten.

Hat alles wunderbar getan. Ich konnte keinerlei Probleme feststellen.

Vielleicht steh ich auch auf dem Schlauch…

Wie aeussert sich denn das Problem wenn der Browser SNI nicht unterstuetzt?

Viele Gruesse,
Martin

2. Tobias ScherbaumNo Gravatar - 12. August 2008

Das Problem äußert sich darin, dass der Client in dem Fall nur mit dem ersten Zertifikat “arbeiten” kann, welches der Apache geladen hat.

Als Beispiel: Ich habe ich SSL+SNI für
a.scherbaum.info und
b.scherbaum.info eingerichtet.
Ein Client, der mit SNI nicht umgehen kann bekommt beim Aufruf von b.scherbaum.info via SSL das Zertifikat für a.scherbaum.info präsentiert.

3. MartinNo Gravatar - 12. August 2008

Ok dann weiss ich, wo der Hund begraben liegt. Denn die SSL-Zertifikate der SSL-Hosts, die ich fuer die Tests verwendet habe, hoeren alle auf “*.domain.tld”.

Habe ich so zum ersten Mal gesehen mit dem * und dachte aber, das sei bei SNI so ueblich.

Nun ist natuerlich die Frage, ob es einen Nachteil gibt mit dieser *-Variante oder ob man da nochmal etwas zusaetzlich beim Apachen einrichten muss. Ansonsten waere es natuerlich zu empfehlen, das einzusetzen.

4. Tobias ScherbaumNo Gravatar - 12. August 2008

*.domain.tld ist immer die gleiche Domain? In dem Fall brauchts nicht einmal SNI, das klappt dank dem *. so oder so - wie gesagt ohne SNI und jeglichen anderen Voodoo. Nachteile hat die *.-Variante aus meiner Sicht keine, setze ich auch so problemlos ein.

5. MartinNo Gravatar - 13. August 2008

Hm das mit *.domain.tld klappt aber nicht, das hier sehe ich dann im error.log, desweiteren mag der Browser das Zertifikat nicht.

[Tue Aug 12 18:07:56 2008] [warn] RSA server certificate is a CA certificate (BasicConstraints: CA == TRUE !?)

Eventuell bin ich auch zu doof, das Zertifikat zu erstellen. Aber nachdem ich ne Anleitung habe, nach der ich immer vorgehe, sollte das eigentlich passen.

6. MartinNo Gravatar - 13. August 2008

Hm wo ist mein Kommentar von eben hingekommen?

Wie gesagt, mit *.domain.tld klappt das bei mir nicht, ich bekomme da abstruse Fehlermeldungen sowohl im Browser wie auch beim Apachen.

7. Tobias ScherbaumNo Gravatar - 13. August 2008

Spricht dafür, dass an deiner Config irgendwas nicht ganz sauber ist …

8. MartinNo Gravatar - 18. August 2008

Lag an dem Zertifikat. Irgendwas ging da bei der Erstellung und Signierung durch CAcert schief. Mit einem neuen Zertifikat funktioniert das mit *.domain.tld wunderbar.

So kann ich erst einmal auf SNI verzichten - was es eh noch nicht im Debianpaket des Apache 2.2 gibt.

9. Tobias ScherbaumNo Gravatar - 18. August 2008

Fein :)

SNI wirds afair auch in Debian Lenny noch nicht haben, siehe
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=461917