HowTo: multiple Apache2 vhosts mit unterschiedlichen SSL-Zertifikaten

Die Aufgabe: in Apache bei verschiedenen vhosts verschiedene SSL-Zertifikate fuer die Verschluesselung definieren.
Das Problem: mit mod_ssl laesst sich das ganze nicht so einfach realisieren.
Die Ursache: vhosts basieren auf Basis von HTTP-Headers, SSL liegt ein Layer darunter. Die Verbindung wird gesichert bevor HTTP gesprochen wird. Der Server kann bei Verbindungsaufbau nicht wissen welchen vhost er danach bedienen soll, deswegen kann er das richtiger Zertifikat nicht auswaehlen.
Die Loesung: mod_gnutls
HowTo: das ganze unter Debian Lenny

Ich gehe an dieser Stelle davon aus, dass man bereits SSL-Zertifikate generiert hat (blubs).

Als naechstes ist es nun wichtig das Modul zu installieren, anzupassen und zu aktivieren:

aptitude install libapache2-mod-gnutls

Danach die /etc/apache2/mods-available/gnutls.conf anpassen:

<IfModule mod_gnutls.c>
  GnuTLSCache dbm /var/cache/apache2/gnutls_cache
 
  AddType application/x-x509-ca-cert .crt
  AddType application/x-pkcs7-crl    .crl
 
  GnuTLSCacheTimeout 300
  NameVirtualHost *:443
</IfModule>

und das Modul aktivieren:

a2enmod gnutls

Nun noch die Zeile:

Listen 443

zu der /etc/apache2/ports.conf hinzufuegen und dabei darauf achten, dass die Zeile vor der „Listen 80“ steht, da es sonst in der /var/log/apache2/error.log zu den folgenden Zeilen kommen kann:

[Sun Dec 05 14:37:06 2010] [error] [client ::1] GnuTLS: Handshake Failed (-8) 'A record packet with illegal version was received.'

Nun koennen die vhosts entsprechend eingerichtet werden. Hier ein generisches Beispiel fuer einen vhost:

<VirtualHost *:443>
    ServerAdmin webmaster@example.net
    ServerName www.example.net
    ServerAlias example.net
    DocumentRoot /var/www/example.net/
 
    <Directory /var/www/example.net/>
        Options +Indexes
    </Directory>
 
    GnuTLSEnable on
    GnuTLSCertificateFile /etc/ssl/myCA/private/www.example.net-key-cert.pem
    GnuTLSKeyFile /etc/ssl/myCA/private/www.example.net-key-cert.pem
    GnuTLSPriorities SECURE:!MD5
 
    CustomLog /var/log/apache2/example.net-access.log combined
</VirtualHost>

Nach einem Neustart von Apache2 kann nun per https auf den gewuenschten vhost zugegriffen werden, viel Spass beim Einrichten des zweiten und freien wenns klappt!

prego

/me... prego!

7 Gedanken zu „HowTo: multiple Apache2 vhosts mit unterschiedlichen SSL-Zertifikaten“

  1. Dabei hast Du ja aber ein Zertifikat was fuer mehrere (Sub??)Domains valid ist. Bei dieser Loesung kannst Du verschiedene Zertifikate fuer verschiedene vhosts auf einer IP haben.

  2. obwohl nein, du hast natuelrich nur ein Zertifikat anstatt X Zertifikate auf einer IP was die ganze Sache bei z.B. 200 Vhosts einfacher macht.

  3. genau. ein zertifikat auf einer ip fuer 200 vhosts mit subject alternative name. und 200 zertifikate fuer 200 vhosts auf einer ip mit mod_gnutls :-)

  4. Den Ansatz hatte ich vor einer Weile auch schonmal getestet. Allerdings wieder verworfen, weil nicht jeder Browser TLS SNI verstanden hat.
    Wie sieht es denn heutzutage aus? Laut https://sni.velox.ch/ kanns mein FF. Mein iOS 4 ebenfalls, mein iOS 3 irgendwas Safari allerdings nicht.

  5. Habe gerade versucht,

    das Verfahren auf einem Testserver mit 2 IPs und 2 Zertifikaten unter Debian 5.0.9 zu installieren. Hat auch wunderbar geklappt, Apache meldet, dass er jetzt mit gnutls (und nicht mehr OpenSSL) hochfährt

    [Wed Nov 30 19:47:24 2011] [notice] Apache/2.2.9 (Debian) mod_gnutls/0.5.1 PHP/5.2.6-1+lenny13 with Suhosin-Patch configured — resuming normal operations

    und die Wesite Nr. 1 kommt problemlos über https. Die Website Nr. 2 meldet (genau wie mit OpenSSL) einen Zertifikatsfehler, weil sie das Zertifikat von Nr. 1 bekommt und das natürlich nicht passt.

    Irgendwelche Hinweise für mich? Danke!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.