Website-Icon PITS Online

mehrere SSL-Seiten auf einer IP mit Apache (SNI)

Apache Secure

Bei Apache Webservern gibt es schon seit längerem die Möglichkeit durch „Server Name Indication“ (SNI) mehrere SSL-Webseiten mit unterschiedlichen URLs und Zertifikaten auf einer IP-Adresse zu hosten.

Hinweis: Es gibt gerade unter älteren Browsern Einschränkungen in der Kompatibilität zu SNI. Dazu gibt es eine Liste bei Wikipedia.

Voraussetzung ist ein installierter Apache 2 Webserver (ab Version 2.2.12) sowie das aktivierte SSL-Modul (sudo a2enmod ssl).

Die Zertifikate können zum Beispiel auf die folgende Art und Weise selbst ausgestellt werden:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/example.com/apache.key –out /etc/ssl/certs/example.com/apache.crt

Oder ein Certificate Signing Request für die Beantragung eines öffentlichen Zertifikats (dieser muss von einer CA signiert werden und das Zertifikat kann dann importiert werden):

openssl req -new -newkey rsa:2048 -nodes -keyout myDomain.key -out myDomain.csr

Anschließend sind für jede Webseite die entsprechenden vhost.conf unter „/etc/apache2/sites-available/“ zu erstellen. Diese können wie folgt aussehen:

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName example.com
        DocumentRoot /var/www

</VirtualHost>


<IfModule mod_ssl.c>
<VirtualHost *:443>

        ServerAdmin webmaster@localhost
        ServerName example.com
        DocumentRoot /var/www

        #   SSL Engine Switch:
        #   Enable/Disable SSL for this virtual host.
        SSLEngine on

        #   A self-signed (snakeoil) certificate can be created by installing
        #   the ssl-cert package. See
        #   /usr/share/doc/apache2.2-common/README.Debian.gz for more info.
        #   If both key and certificate are stored in the same file, only the
        #   SSLCertificateFile directive is needed.
        SSLCertificateFile /etc/ssl/certs/example.com/apache.crt
        SSLCertificateKeyFile /etc/ssl/private/example.com/apache.key
</VirtualHost>

Die folgenden Werte sollten dabei angepasst werden:
ServerAdmin: Die E-Mail-Adresse des Webmasters
ServerName: Die Domain der Webseite (ohne "WWW")
DocumentRoot: Der Pfad zu den Dateien der Webseite
SSLCertificateFile: Der Pfad zum Zertifikat für die Webseite
SSLCertificateKeyFile : Der Pfad zum Zertifikatsschlüssel für die Webseite

</IfModule>

Damit es beim Aufrufen der IP per HTTPS auch eine Antwort gibt, sollte eine vhost.conf mit dem „Default“ Werten für SSL existieren:

<VirtualHost _default_:443>

Nun muss nur noch die Portkonfiguration („/etc/apache2/ports.conf“) angepasst werden:

NameVirtualHost *:80
NameVirtualHost *:443

Listen 80

<IfModule mod_ssl.c>
    # If you add NameVirtualHost *:443 here, you will also have to change
    # the VirtualHost statement in /etc/apache2/sites-available/default-ssl
    # to 
    # Server Name Indication for SSL named virtual hosts is currently not
    # supported by MSIE on Windows XP.
    Listen 443
</IfModule>

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

Abschließend braucht nur noch der Webserver neu gestartet zu werden, um alle Konfigurationen zu übernehmen:

service apache2 restart

Damit sind nun mehrere Webseiten unter verschiedenen URLs und mit unterschiedlichen Zertifikaten über eine IP erreichbar.

Die mobile Version verlassen