Apache SSL Verschlüsselung aktivieren (StartSSL)


Damit die Daten zwischen Client und Owncloud Server auch verschlüsselt übertragen werden, muss im Webserver noch die Übertragung per SSL oder TLS aktivert werden. Hier müssen noch entsprechende Zertifikate bereitgestellt werden. Es gibt zwei Möglichkeiten, es können selbst erstellte oder Zertifikate eines Dienstleisters installiert werden. Ich verwende für meine Owncloud Installation ein Zertifikat von StartSSL. Dieser Zertifikatsdienstleister erlaubt das kostenlose Erstellen eines beglaubigten Zertifiktes.

Zuerst sollte man ein Verzeichnis für die Zertifikatsdateien erstellen. Plant man mehrere Virtuelle Hosts mit unterschiedlichen Zertifikaten auszustatten, so sollte man sich eine entsprechende Unterordner-Struktur anlegen.

mkdir /etc/apache2/cert
cd /etc/apache2/cert/

Nun muss ein streng geheimer Privater Schlüssel generiert werden. Da dieser Schlüssel die Sicherheit stark beeinflusst, sollte man eine angemessene Schlüssellänge wählen. Schlüssellängen unter 2048 Bit sollten heutzutage nicht mehr benutzt werden.

openssl genrsa -out privatekey.pem 4096

Theoretisch könnte man den Schlüssel mit einem Passwort versehen, allerdings müsste man  dann bei jedem Start des Apache-Dienstes das Passwort wieder eingeben. Als nächstes ist es notwendig eine csr-Datei (Certificate Signing Request) zu erzeugen.

openssl req -new -key privatekey.pem -out cert.csr -sha512

Es werden einige Attribute abgefragt. Besonders der „Common Name“ sollte richtig ausgefüllt werden, da hier die Domain eingetragen wird für die das Zertifikat später gültig sein soll. StartSSL ignoriert alle anderen Attribute.

Nun muss man sich bei StartSSL anmelden und über eine E-Mailadresse authentifizieren. Ist der Vorgang erfolgreich gewesen kann man sein Zertifikat erstellen. StartSSL bietet auch an, den geheimen Schlüssel und die csr-Datei zu erstellen. Allerdings bin ich der Meinung, dass man dies dankend ablehnen sollte. Die Alternative ist, den Inhalt der csr-Datei in das entsprechende Textfeld beim Erstellen des Zertifikates zu kopieren. Nach Abschluss des Vorgangs erhält man eine zip-Datei mit den Zertifikaten.

Apache Konfiguration

Nun kann der Webserver konfiguriert werden. Der erste Schritt ist die Kontrolle der Datei „/etc/apache2/ports.conf“. Hier sollte der Port 443 für die SSL Module aktiv sein (es sollte ein default Eintrag existieren). Als nächstes können die Zertifikatsdateien erstellt werden. Es werden drei Dateien benötigt. Die erste ist die privatekey.pem, die schon erstellt wurde. Hier ist auf jeden Fall darauf zu achten, dass nur Root darauf Zugriff hat.

chmod go-rwx /etc/apache2/cert/privatekey.pem

Mit diesem Befehlt werden der Gruppe (group) und anderen Benutzern (other) das Lese-, Schreib- und Ausführen-Recht entzogen. Zur Kontrolle ob es auch wirklich so ist, kann man sich mit „ls“ die Datei und ihre Attribute ansehen.

ls -lh /etc/apache2/cert/privtekey.pem
-rw------- 1 root root 3.2K Jan  6 15:13 /etc/apache2/cert/privatekey.pem

Nun müssen die beiden Dateien aus dem Apache  Zip-Archiv von StartSSL (die ZIP-Datei enthält mehrere ZIP-Archive für unterschiedliche Webserver) in das cert-Verzeichnis kopiert werden. Bitte auch hier auf die Rechte achten. Lesen kann diese Dateien jeder, aber Schreibrechte sollte nur „root“ haben. Nun sollte es eine Datei mit dem Namen „privatekey.pem“, eine mit dem beantragten „Domainnamen.crt“ und eine „1_root_bundle.crt“ Datei geben. Im nächsten Schritt wird SSL für den Webserver aktivert.

a2enmod ssl

Nun kann man einen Virtuellen Host für SSL/TLS-Verbindungen konfigurieren oder SSL/TLS für alle Seiten aktivieren, indem man die „default-ssl.conf“ ergänzt.

SSLEngine on
SSLCertificateFile /etc/apache2/cert/meine-domain.crt
SSLCertificateKeyFile /etc/apache2/cert/privatekey.pem
SSLCertificateChainFile /etc/apache2/cert/1_root_bundle.crt

Wer noch für ein bisschen mehr Sicherheit sorgen möchte, kann unsichere Verschlüsselungsprotokolle deaktivieren.

SSLProtocol all -SSLv2 -SSLv3

Um es noch sicherer zu machen, kann man auch die Verschlüsselungsalgorithmen noch einschränken. Allerdings sollte man sich bewusst sein, das dies auch zu Problemen führen kann.

SSLCipherSuite 'ALL:!DH:!EXPORT:!RC4:+HIGH:+MEDIUM:!LOW:!aNULL:!eNULL'

Alles was ein“!“ am Anfang hat ist nicht erlaubt.

Zum Schluss muss noch der Webserver einen Reload durchführen.

service apache2 reload

Nun kann man versuchen seine Webseite über eine „https://“ Verbindung zu besuchen.

Links:

StartSSL
Apache2 Strong Encryption


Schreibe einen Kommentar