Table of Contents

Namensbasierte vhosts via https:// bei ispCP via GnuTLS

Die Grundlagen und Schritte welche nötig sind um eine eigene Zertifizierungsstelle und entsprechende Zertifikate zu erstellen findet Ihr hier. Dieses Howto bezieht sich lediglich auff die Einrichtung von gnuTLS mit bereits erstellten Zertifikaten.

Mit dem Apache mod_ssl-Modul ist ein Zertifikat nur für eine IP-Adresse verwendbar. Verwaltet man jedoch mehrere Webseiten (vhosts) auf einem Server und möchte für mehr als eine dieser Webseiten ein eigens ausgestelltes Zertifikat nutzen, bietet sich die Verwendung von gnuTLS an.

GnuTLS bietet die Möglichkeit für jeden vhost ein eigenes Zertifikat zu hinterlegen.

Installation von gnuTLS unter Debian Lenny

Die Installation ist sehr einfach! In der Konsole folgende zwei Befehle aufrufen:

sudo aptitude install libapache2-mod-gnutls
a2enmod gnutls

Der erste Befehl installiert die nötigen Pakete, der zweite Befehl installiert das Modul in die Apache-Umgebung. Zum entfernen eines Moduls wird einfach “a2dismod xxxx” aufgerufen.

Damit nun der Webserver auch auf SSL-Anfragen reagiert, muss apache angewiesen werden auf Port 443 zu horchen. dazu öffne die Datei /etc/apache2/ports.conf und füge folgendes hinzu:

<IfModule mod_ssl.c>
    Listen 443
</IfModule>
<IfModule mod_gnutls.c>
    Listen 443
</IfModule>

Hier haben wir nun direkt eine Sicherheitsabfrage eingebracht, die apache nur dann auf Port 443 horchen lässt, wenn das mod_ssl Modul, oder das mod_gnutls-Modul aktiviert sind. Andernfalls würde apache beim Starten ein Fehler zurückgeben, wenn keine vhosts für SSL (Port 443) definiert wurden.

Nun muss in der Datei /etc/ispcp/apache/working/ispcp.conf noch folgendes Hinzugefügt werden (am besten in der Nähe des Bereits existierenden Eintrags für Port 80):

NameVirtualHost 78.46.21.244:443

Danach den Webserver restarten:

apache2ctl restart


Einrichten eines vhosts für https

Für jeden vHost der via SSL erreichbar sein soll, müssen nun die entsprechenden Zertifikate mit gnuTLS geladen werden. Dazu wechsel in das Verzeichnis /etc/apache2/sites-available. Hier erstellen wir eine neue Datei - es steht dir offen für jede Domain ne eigene Datei zu erstellen, oder alle in eine Datei zu schreiben. Wenn du für jede Domain ne eigene Datei erstellst, benenne Sie xx_ssl_domainname.conf

touch 01_ssl.conf


Nun öffne die Datei mit einem Texteditor deiner Wahl. Hier eine Beispielkonfiguration dieser Datei (wieder mit mod_ssl und ggnuTLS Weiche):

<VirtualHost 127.0.0.1:443>
        ServerName admin.meineDomain.de
        DocumentRoot /var/www/virtual/meineDomain.de/htsdocs/

        ErrorLog        /var/log/apache2/users/ssl.meineDomain.de-error.log
        TransferLog     /var/log/apache2/users/ssl.meineDomain.de-access.log


        <IfModule mod_ssl.c>
                <IfModule !mod_gnutls.c>
                        SSLEngine On
                        SSLProtocol all
                        SSLCipherSuite HIGH:MEDIUM
                        SSLCertificateFile    /etc/ssl/public/example.localhost.crt
                        SSLCertificateKeyFile /etc/ssl/private/example.localhost.key
                </IfModule>
        </IfModule>

        <IfModule mod_gnutls.c>
                GnuTLSEnable on
                GnuTLSPriorities SECURE:!MD5
                GnuTLSCertificateFile /etc/ssl/public/example.localhost.crt
                GnuTLSKeyFile /etc/ssl/private/example.localhost.key
        </IfModule>
        
        <IfModule mod_fcgid.c>
                Include /etc/apache2/mods-available/fcgid_ispcp.conf
        <Directory /var/www/virtual/oekorenta-portal.de/htdocs>
            FCGIWrapper /var/www/fcgi/oekorenta-portal.de/php5-fcgi-starter .php
            Options +ExecCGI
        </Directory>
        <Directory "/var/www/fcgi/oekorenta-portal.de">
            AllowOverride None
            Options +ExecCGI MultiViews -Indexes
            Order allow,deny
            Allow from all
        </Directory>
    </IfModule>
    
</VirtualHost>


Für den Fall, dass default-ssl geladen sein sollte, entlade diese Konfiguration

a2dissite default-ssl

danach laden wir unsere neue SSL-Konfiguration für “meineDomain.de”:

a2ensite 01_ssl.conf


Dann noch den Apache restarten und fertig:

apache2ctl restart


Jetzt im Broser die Eingerichtete Domain testen

https://meineDomain.de

Troubleshooting / Fehlerbehebung

Vor allen anderen Tests, sollte geprüft werden, welche vhosts Apache erkannt hat, und ob der gewünschte bzw. hinzugefügte Host vorhanden ist:

apache2ctl -t -D DUMP_VHOSTS 2>&1 | less

Problem:
Eine Webseite ist via https: erreichbar, und html, xml und andere Dateien werden auch sauber angezeigt. Allerdings werden keine PHP-Dateien angezeigt. Stattdessen kommt ein Fehler “503 Service Unavailable”, oder ein “Internal Server Error”.
Antwort:
Drei Dinge sind zu checken: - Ist das Modul gnutls geladen ( a2enmod gnutls ) ? - Steht in der ssl.conf für diesen Hostabschnitt mod_fcgid.c - Wurde der Server neu gestartet (apache2ctl relstart )

Problem:
Nachdem eine weitere Domain mit eigenem Zertifikat eingerichtet wurde, erscheint diese Domain dennoch nach Aufruf via https: mit einer Fehlermeldung. Die Meldung bezieht sich dabei auf das hauptzertifikat des Servers, so dass das speziell für die neue Domain eingerichtete Zertifikat scheinbar nicht berücksichtigt wird.
Antwort:

===== Quelle =====
Wiki von xstable.de