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.