blog.bartlweb - a technologist's external brain

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

Dieser Artikel hat Dir deinen Tag gerettet?

... und mühevolles Probieren, Recherchieren und damit Stunden an Zeit gespart? Oder einfach nur Dein Problem gelöst?

Dann würde ich mich freuen, wenn Du meine Zeit für die Erstellung dieses Blogartikels mit einer kleinen Anerkennung honorierst:

Zahlung mit PayPal oder Kreditkarte.

Hinweis zur Verwendung

Die Übermittlung einer Zahlung ist eine persönliche Anerkennung Ihrerseits an den Entwickler (Christian Bartl, Privatperson). Eine Zahlung ist nicht zweckgebunden und es ist keine Gegenleistung zu erwarten. Bitte beachten Sie, dass für eine übermittelte Zahlung keine Quittung ausgestellt werden kann.

Über den Autor

Christian Bartl

Christian Bartl Requirements Engineer
& Solution Architect für Online und Mobile

Als Technologie-Enthusiast und begeisterter Programmierer entwickle ich in meiner Freizeit Websites, Software und IT-Lösungen, die mir selbst und anderen den Alltag vereinfachen.

mehr auf christian.bartl.me

Kommentare

Noch kein Kommentar vorhanden.
Sei der Erste! - Ich freue mich über deine Anmerkung, Kritik oder Frage.

Kommentar schreiben

Der hier angegebene Name wird gemeinsam mit deinem Kommentar auf der Website veröffentlicht.

Deine E-Mail-Adresse wird zur einmaligen Benachrichtigung bei Veröffentlichung des Kommentars genutzt.

Benachrichtigung per E-Mail über Antworten auf meinen Kommentar erhalten.

Bitte tippe die Zahlenkombination "7462" ein, nur dann kann ich deinen Kommentar entgegennehmen.

Bitte fülle dieses Feld nicht aus, nur dann kann ich deinen Kommentar entgegennehmen.