Apache mit SSL einrichten

Prinzipiell ist die Anleitung von Linux-StepByStep sehr brauchbar.

Allerdings musste ich nur mod_ssl nachinstallieren.

Die Punkte 8.2-8.5 ("8.2 Edit or create an OpenSSL template", "8.3. Create a new CA certificate", "8.4. Create a Certificate Signing Request (CSR)", "8.5. Sign the CSR") fielen natürlich weg, weil ich ein CAcert-Zertifikat besitze und den Key schon vorher generiert habe.

Unter Fedora gibt es schon vorgegebene Verzeichnisse für die SSL-Keys (/etc/httpd/conf/ssl.*). Zunächst habe ich die vorgenerierten Keys und Zertifikate (server.key, server.crt) gelöscht und meine eigenen als ssl.key/cacert.key bzw. ssl.crt/cacert.crt gespeichert. Wichtig ist auch, dass die privaten Schlüssel root gehören müssen und auch nur von root gelesen werden dürfen!

Die eigentliche Apache-SSL-Konfiguration geschieht über /etc/httpd/conf.d/ssl.conf. Da ich aber lieber SSL direkt bei meinen virtual hosts konfiguriere, habe ich alle Anweisungen innerhalb von <VirtualHost> ... </VirtualHost> auskommentiert.

Statt dessen habe ich der /etc/httpd/conf/sites-enabled/default folgende Einträge hinzugefügt:

Update Dezember 2014: Bitte beachten Sie, dass die Aktivierung der Krypto-Algorithmen (SSLCipherSuite) bereits 2005 geschah. Für heutige Sicherheitsanforderungen sind diese nicht mehr geeignet.
<VirtualHost *:443>
    SSLEngine on
    LogLevel warn
    ErrorLog logs/ssl_error_log
    TransferLog logs/ssl_access_log
    SSLCertificateFile /etc/httpd/conf/ssl.crt/cacert.crt
    SSLCertificateKeyFile /etc/httpd/conf/ssl.key/cacert.key
    SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP
    SetEnvIf User-Agent ".*MSIE.*" \
        SetEnvIf User-Agent ".*MSIE.*" \
        nokeepalive ssl-unclean-shutdown \
        downgrade-1.0 force-response-1.0
</VirtualHost>

Anschließend noch Apache neu starten und anschließend sollte die Verbindung gesichert sein.

Zwischenzertifikate

Ab und an hat man ein Zertifikat (z.B. ein Class-3-Zertifikat von CAcert), das nur von einer Zwischenzertifizierungsstelle (Intermediate CA) zertifiziert wurde. Das Zertifikat dieser intermediate CA ist nicht im Browser integriert, jedoch von einer CA signiert, die im Browser enthalten sein sollte. Auf Grund der asymmetrischen Verschlüsselung kann der Browser jedoch trotzdem das Zertifikat verifizieren, wenn er Zugriff auf das Zwischenzertifikat hat.

Daher muss man das Zertifikat der intermediate CA ebenfalls im Apache eintragen. Die folgende virtual host-Definition muss ergänzt werden um den Eintrag:

SSLCACertificateFile /etc/httpd/conf/ssl.crt/intermediate_ca.crt

Anschließend muss natürlich auch der Apache neu gestartet werden und alles sollte im Lot sein.