Apache SSL Einstellungen
Https bei Webseiten wird immer wichtiger und so kommen immer mehr Webmaster und Administratoren mit den Apache SSL Einstellungen in Kontakt. Vor kurzem habe ich eine Seite übersiedelt die auf einem selbst gehosteten Server liegt. Dabei habe ich mich auch mit dem SSL Modul von Apache auseinandersetzen müssen.
Apache SSL Einstellungen
Damit Apache mit SSL Zertifikaten arbeiten und Webseiten über das sichere https Protokoll ausliefern kann wird das Modul mod_ssl benötigt. Falls noch nicht aktiv wird das mit dem Befehl
a2enmod ssl
aktiviert. Ob dieses aktiviert ist findet man heraus, indem man im mods-enabled Ordner einen Link zu ssl.conf findet. Den Ordner findet man im Apache Konfigurationsordner, meistens unter /etc/apache2 oder /etc/httpd, abhängig von der Distribution.
Zertifikate erstellen
SSL Zertifikate werden im PEM Format ausgeliefert. Dieses ist laut dem X.509 Standard ein base64 codierter String, der durch „—–BEGIN CERTIFICATE—–“ und „—–END CERTIFICATE—–“ eingeschlossen ist. Für Testzwecke kann man solche Zertifikate sehr einfach auf dem Server selbst erstellen. Ich habe bereits gezeigt wie man selber HTTPS Zertifikate erzeugt. Das Problem ist aber, dass selbst erstellte Zertifikate zuerst immer unsicher sind. Verwendet man ein solches blendet der Browser eine Warnung ein, die Verbindung ist zwar durch SSL geschützt, aber dem Zertifikat wird nicht vertraut. Vertrauen erlangt man, in dem man ein Zertifikat von einer vertrauenswürdigen Stelle signieren lässt. Üblicherweise kauft man von solchen Stellen direkt signierte Zertifikate.
Ich gehe nun davon aus, dass man sich bereits ein solches signiertes Zertifikat gekauft hat.
Zertifikate hinzufügen
Apache SSL Einstellungen sind direkt im VirtualHost zu definieren. Das Format sieht wie folgt aus:
<VirtualHost *:443> DocumentRoot /var/www/html ServerName www.yourdomain.com SSLEngine on SSLCertificateFile /pfad/zur/zertifikat.crt SSLCertificateKeyFile /pfad/zum/zertifikat.key SSLCertificateChainFile /pfad/zum/brueckenzertifikat.crt </VirtualHost>
Die Syntax sollte bereits bekannt sein. Neu sind die Zeilen die mit SSL beginnen. Wichtig: es muss ein eigener VirtualHost Eintrag für HTTPS mit dem Port 443 erstellt werden. Zugriffe auf den HTTP Standardport bleiben soweit konfiguriert davon unabhängig.
SSLEngine on aktiviert am Webserver die Verwendung von Zertifikaten. Das Zertifikat selbst wird über zwei Dateien definiert. Das ist zum einen das Zertifikat selbst *.crt Datei und zusätzlich noch der erstellte öffentliche Schlüssel dazu *.key. Der Schlüssel wird benötigt um damit verschlüsselte Datenpakete wieder zu entschlüsseln.
Die Angabe eines Brückenzertifikats ist optional. Manche Anbieter von SSL Zertifikaten geben ein solches Zertifikat mit an, wird das dann nicht verwendet funktioniert das Zertifikat nicht korrekt. Hat man also ein Brückenzertifikat, dann muss man diese Zeile hinzufügen.
Alle 3 Dateien (zertifikat.crt, zertifikat.key und brueckenzertifikat.crt) sind im selben PEM Format hinterlegt. Wie diese am Server liegen ist egal, hauptsache der Pfad stimmt und die Datei ist lesbar. Ich lege mir dafür normalerweise im /etc/apache2 Ordner einen Unterordner ssl.crt an. Dort erstelle ich die Dateien. Meistens laufen mehrere Webseiten unterschiedlicher Domains auf einem Server, es macht also Sinn die Zertifikate mit domainname.crt zu benennen. Das erleichtert die spätere Wartung enorm.
Der letzte Schritt ist der Neustart des Webservers mit
service apache2 restart
Fazit
Die Apache SSL Einstellungen sehen auf den ersten Blick recht kompliziert aus, hat man aber einmal einen Server auf HTTPS laufen sind weitere Domains auch ohne Hilfe umzustellen. Der modulare Aufbau von Apache hilft dabei sehr, die default-ssl.conf Datei die man in einer frischen Apache Installation findet ist auch eine hilfreiche Quelle für die Fehlersuche.