Da die Dokumentation zur Verwendung von SSL-Zertifikaten unter Apache HTTPd nicht immer verständlich geschrieben ist hier eine kurze Zusammenfassung der Konfiguration meines Laborsystems.
Die folgenden Schritte wurden auf einem Windows Server durchgeführt, sollten mit geringen Anpassungen aber auch unter Linux funktionieren.
Voraussetzung
- Apache wurde mit OpenSSL-Unterstützung kompiliert
- SSL-Zertifikat vorhanden (als .pfx oder pem-Archiv)
- Port 443 in der Firewall freigegeben
Vorbereitung der Zertifikate
Wir benötigen
- Das SSL-Zertifikat Base64-Codiert (.cer oder .crt)
- Den Private Key für das Zertifikat OHNE Passwortschutz (.key)
- Das Zertifikat der Zertifizierungsstelle(n) bzw. “Intermediate CA” Zertifikat. Bei RapidSSL die “Intermediate CA” Zertifikatskette.
Da wir bei unseren Zertifikaten meistens mit einer .pfx-Datei arbeiten (beinhaltet das Zertifikat und den passwortgeschützten Private Key) müssen wir diese erst aufteilen. OpenSSL ist das richtige Werkzeug dafür und wird mit Apache mitgeliefert. Die entsprechende .exe liegt im /bin-Verzeichnis des Apache Server.
Zuerst kopiert man sich die .pfx-Datei ins selbe Verzeichnis wie die openssl.exe.
Auf der Kommandozeile extrahiert man zuerst den Private Key:
openssl.exe pkcs12 -in wildcard-domain.at-2013.pfx -nocerts -out wildcard-domain.at-2013-encrypted.key
Man muss in diesem Schritt erst das Passwort für das .pfx File und danach 2x ein neues Passwort (für das generierte .key-File) vergeben.
Danach exportiert man das eigentliche Zertifikat aus der .pfx-Datei:
openssl.exe pkcs12 -in wildcard-domain.at-2013.pfx -clcerts -nokeys -out wildcard-domain.at-2013.crt
Man muss hierbei wieder das Passwort für des .pfx File eingeben.
Da Apache nicht bei jedem Dienst-Neustart das Passwort für den Private Key eingeben kann muss der in Schritt 2 erstellte Key noch entschlüsselt werden:
openssl rsa -in wildcard-domain.at-2013-encrypted.key -out wildcard-domain.at-2013.key
Auch diesmal verlangt OpenSSL nach einem Passwort – allerdings nach dem im 2. Schritt vergebenen.
Die Dateien wildcard-domain.at-2013.crt (SSL-Zertifikat), wildcard-domain.at-2013.key (Private Key) und das Zertifikat der Zertifizierungsstelle(n) am Besten im Apache-Unterverzeichnis /conf/ssl abgelegt. WICHTIG: Die nicht mehr benötigten Dateien bitte unbedingt wieder löschen!
Apache Config
Folgende Einträge müssen in der httpd.conf aktiviert werden:
LoadModule ssl_module modules/mod_ssl.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
Include conf/extra/httpd-ssl.conf
Globale SSL-Optionen
Setzen der globalen SSL-Optionen in der Datei “httpd-ssl.conf”:
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
SSLPassPhraseDialog builtin
SSLSessionCache "shmcb:D:/Apache/logs/ssl_scache(512000)"
SSLSessionCacheTimeout 300
Listen 443
Vhost Config
Das eigentliche Zertifikat muss im vHost-Eintrag hinterlegt werden. Der im Zertifikat hinterlegte Name muss dabei natürlich mit den “Servername”- bzw. “ServerAlias”-Einträgen des vHosts übereinstimmen.
<VirtualHost *:443>
[... Standard-Einstellungen, Hostname, Verzeichnisse ...]
SSLEngine on
SSLCertificateFile "D:/Apache/conf/ssl/wildcard-domain.at-2013.crt"
SSLCertificateKeyFile "D:/Apache/conf/ssl/wildcard-domain.at-2013.key"
SSLCertificateChainFile "D:/Apache/conf/ssl/RapidSSL-Intermediate-CA.cer"
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
BrowserMatch "MSIE [2-5]" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
</VirtualHost>