https in Apache Webserver aktivieren
Wer SSL-geschützte HTTPS-Verbindungen auf seinen Apache Webserver zulassen möchte benötigt ein SSL-Zertifikat. Dieses gibt es entweder von einer Zertifizierungsstelle oder für Testumgebungen bzw. private Anwendungen reicht auch ein selbstsigniertes Zertifikat. OpenSSL bzw. das Apache Modul mod_ssl sind Voraussetzung für den Betrieb.
SSL-Zertifikat generieren
Für private Server oder Testumgebungen reicht ein selbstsigniertes Zertifikat meist aus. In Live-Umgebungen rate ich dringend Zertifikate von anerkannten Zertifizierungsstellen zu nutzen.
Private-Key
Der erste Schritt für die Erstellung eines Zertifikats ist die Erstellung eines privaten Schlüssels. Diesen sollten Sie zum jetzigen Stand der Technik mit einer Länge von mindestens 2048bit erstellen.
openssl genrsa -out privatekey.key 2048
Achten Sie darauf, dass Ihr Private-Key nicht in falsche Hände gerät.
Certificate Signing Request
Danach müssen Sie wie auch für die Beantragung eines Zertifikates bei einer Zertifizierungstelle eine Antrag in der Form einer CSR-Datei (Certificate Signing Request) erstellen.
openssl req -new -key privatekey.key -out certificate.csr
Füllen Sie die folgenden Fragen entsprechend Ihres Standortes und Ihrer Domain aus. Wichtig ist dabei der Common Name. Dieser Eintrag entscheidend für welche Domain der Antrag gültig ist. Tragen Sie dort www.domain.com ein ist das Zertifikat nur für domain.com und www.domain.com gültig. Für ein Wildcard-Zertifikat müssen Sie *.domain.com angeben. Um die Erstellung nicht zu verkomplizieren sollten Sie auf die Vergabe eines Passwortes verzichten.
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]: AT
State or Province Name (full name) [Some-State]: Vienna
Locality Name (eg, city) []: Vienna
Organization Name (eg, company) [Internet Widgits Pty Ltd]: bartlweb
Organizational Unit Name (eg, section) []:.
Common Name (eg, YOUR name) []: *.bartlweb.net
Email Address []: webmaster@bartlweb.net
Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Zertifikat (CRT) erstellen
Nun kann das eigentliche SSL-Zertifikat erstellt werden. Geben Sie die Gültigkeitsdauer des Zertifikats über den Parameter days in Tagen an (üblich sind Zeiträume von 1 oder 2 Jahren).
openssl x509 -req -days 365 -in certificate.csr -signkey privatekey.key -out certificate.crt
SSL-Zertifikat in Apache integrieren
Legen Sie aus Sicherheitsgründen den oben erstelleten Private-Key bzw. das erstellte Zertifikat unbedingt außerhalb des Apache Document Root ab.
mod_ssl aktivieren
Um SSL in Apache zu verwenden müssen Sie über den folgenden Befehl das Apache Modul mod_ssl aktivieren.
a2enmod ssl
SSL-Zertifikat integrieren
Je nach Konfiguration Ihres Servers müssen die nachfolgenden Konfigurationszeilen in die httpd.conf oder in die jeweilige Konfiguration des virtuellen Hosts integriert werden. Vergessen Sie nicht die globalen SSL-Einstellungen der Apache-Default-Konfiguration zu aktivieren.
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /path/to/certificate.crt
SSLCertificateKeyFile /path/to/privatekey.key
<Files ~ "\.(cgi|shtml|phtml|php3?)$">
SSLOptions +StdEnvVars
</Files>
<Directory "/srv/www/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
Root-Zertifkat
Viele Zertifizierungsstellen nutzen für die Ausgabe nicht ein Root-Zertifikat sondern haben mehrere Subzertifikate. Damit Apache auch mit solchen Zertifikaten umgehen kann müssen diesem das Root-Zertifikat und die Subzertifkate des Ausstellers in der Konfiguration mitgegeben werden.
SSLCertificateChainFile /mnt/data/www/ssl/subca.crt
SSLCACertificateFile /mnt/data/www/ssl/ca.crt
IP-Adressen nicht mitloggen
HTTPS-Zugriffe auf Webseiten haben vor allem den Vorteil persönliche Daten des Nutzers vor Zugriff durch Dritte zu schützen. Oft ist eine erhöhte Anonymität gewünscht. Dahin gehend können Sie Ihren Server so konfigurieren, dass dieser bei HTTPS-Zugriffen keine IP-Adressen mitloggt.
CustomLog /var/log/apache2/ssl_request_log ssl_combined_anonymized