ubuntuusers.de

ubuntuusers.deWikiApacheSSL

SSL

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Wiki/Icons/security.png Diese Anleitung beschreibt die Aktivierung der SSL-Verschlüsselung für den Webserver Apache2. Dadurch ist es z.B. möglich, Webseiten vom eigenen Webserver verschlüsselt über das Internet zu öffnen. Dabei wird ein selbst erstelltes TLS-/SSL-Zertifikat genutzt. Soll der Webserver in einem öffentlichen Rahmen laufen, so sollte man darauf verzichten und sich um ein korrektes Zertifikat bemühen.

Experten-Info:

Anfang April 2014 ist der Heartbleed-Bug (CVE-2014-0160) in OpenSSL bekannt geworden. Leider hat sich Canonical entscheiden, bis einschließlich Ubuntu 14.04 nicht die aktualisierte Version 1.0.1g oder neuer zu nutzen, sondern nur die Pakete in den offiziellen Paketquellen zu patchen. Seit dem 7. April 2014 stehen diese als Update zur Verfügung. Man sollte sich daher nicht durch die scheinbar betroffene Versionsnummer des Pakets täuschen lassen.

Allerdings wird empfohlen, vor diesem Datum mit Ubuntu 12.04 oder neuer erstellte Zertifikat zu verwerfen und neue zu erstellen. Ubuntu 10.04 ist von diesem Fehler nicht betroffen.

Vorbereitungen

SSL Zertifikat erzeugen

Als erster Schritt muss ein Zertifikat erstellt werden (dies kann entfallen, wenn man schon über ein Zertifikat verfügt). Da hier verschiedene, zum Teil ineinander geschachtelte Befehle ausgeführt werden müssen, empfiehlt es sich ein Pseudo-Root-Terminal [1] mittels

sudo -i 

zu öffnen. Danach kann man das Zertifikat mit den folgenden Befehlen erzeugen.

mkdir -p /etc/apache2/ssl
openssl req -new -x509 -days 365 -nodes -sha256 -out /etc/apache2/ssl/apache.pem -keyout /etc/apache2/ssl/apache.pem
ln -sf /etc/apache2/ssl/apache.pem /etc/apache2/ssl/`/usr/bin/openssl x509 -noout -hash < /etc/apache2/ssl/apache.pem`.0
chmod 600 /etc/apache2/ssl/apache.pem 

Den Wert nach -days XXX nach Belieben anpassen (je nachdem, wie lange das Zertifikat gelten soll). Mit dem Befehl

exit 

schließt man das Root-Terminal wieder.

Konfiguration

Um TLS/SSL verwenden zu können, muss der Apache Webserver auf TCP-Port 443 lauschen. Hierzu muss die Datei /etc/apache2/ports.conf geändert werden [2]. Diese sieht standardmäßig so aus:

1
2
3
4
5
Listen 192.168.1.10:80

#<IfModule mod_ssl.c>
#    Listen 443
#</IfModule>

Diese muss so abgeändert werden:

1
2
3
4
Listen 192.168.1.10:80
<IfModule mod_ssl.c>
    Listen 443
</IfModule>

Nach der Änderung muss der Apache Webserver mit "reload" neu gestartet werden [3].

sudo service apache2 reload 

Modul aktivieren

Anschließend aktiviert man das SSL-Modul des Webservers mit:

sudo a2enmod ssl 

Nach dem Laden des Moduls muss der Apache Webserver mit "force-reload" neu gestartet werden.

sudo service apache2 force-reload 

SSL-Webseite konfigurieren

Nun wird der VirtualHost für SSL eingerichtet. Für die Konfiguration wird die Datei /etc/apache2/sites-available/ssl (ab Ubuntu 13.10 /etc/apache2/sites-available/ssl.conf) mit folgendem Inhalt erstellt:

1
2
3
4
5
<virtualhost *:443>
        SSLEngine On
        SSLCertificateFile /etc/apache2/ssl/apache.pem
        DocumentRoot /PFAD/ZU/DEN/WEBINHALTEN
</virtualhost>

Die neue VirtualHost-Konfiguration muss noch aktiviert werden:

sudo a2ensite ssl 

Nach diesen Änderungen muss der Apache Webserver ein letztes Mal mit "force-reload" neu gestartet werden.

sudo service apache2 force-reload 

Experten-Info:

Einen VirtualHost für den Port 443 darf es aus technischen Gründen nur einmal geben, da Apache für diesen Port nur ein einziges SSL-Zertifikat ausliefern kann. Es ist also nicht möglich, die Adressen https://www.seite1.de und https://www.seite2.de über den selben Apache ausliefern zu lassen.

Nur unter Verwendung einer zusätzlichen IP-Nummer (und anschließender Anpassung der Listen-Direktiven) oder bei einem entsprechenden Vorhandensein der Erweiterung Subject Alternative Name {en} im SSL-Zertifikat würde dieses Szenario funktionieren.

Problembehebung

Firefox

Selbstsignierte Zertifikate werden über entsprechende Warnhinweise prinzipiell als verdächtig bzw. unsicher eingestuft und der Client-Zugriff komplett blockiert. Daher müssen eigene Zertifikate erst heruntergeladen und über dauerhafte Ausnahmeregeln legimitiert werden. Falls Firefox dieses verweigert bzw. gar nicht erst anbietet, ruft man die Pseudo-Adresse about:config auf und setzt den Wert des Schlüssels

browser.xul.error_pages.expert_bad_cert

auf true. Inzwischen warnen auch andere Browser vor selbstsignierten Zertifikaten.

Port 443 schon von Apache selbst belegt

Erscheint beim Starten des Servers die Fehlermeldung

(98)Address already in use: make_sock: could not bind to address 0.0.0.0:443

no listening sockets available, shutting down

so sollten die Einträge in /etc/apache2/ports.conf überprüft werden. Dort darf der Eintrag

1
Listen 443

nur einmal vorhanden sein. Auch in anderen Dateien der Apache-Konfiguration darf diese Direktive nicht nochmal vorkommen!

SSL-Fehlermeldung beim Verbindungsaufbau

Erscheint beim Seitenaufruf im Browser die Fehlermeldung

ssl_error_rx_record_too_long

liegt das meist an fehlerhaft konfigurierten vHosts. Es sollten zwei NameServerHost-Einträge innerhalb der Dateien in /etc/apache2/sites-available/ vorhanden sein:

1
2
NameVirtualHost *:80
NameVirtualHost *:443

Der Eintrag für Port 80 sollte im Abschnitt default und der Eintrag für Port 443 im Abschnitt ssl sein.

SSL erzwingen

Oftmals wird gewünscht, dass gewisse Seiten nur über https:// erreicht werden können. Ein klassisches Beispiel sind Webmailer wie Squirrelmail oder RoundCube Webmail {en}. Dies kann man mit dem Apache-Modul mod_rewrite erreichen.

  • mod_ssl {en} - Dokumentation bei apache.org

  • ssl-cert - selbstsignierte Zertifikate erstellen

  • CA - eigene Certification Authority betreiben

  • CAcert - Community, die kostenlose SSL-Zertifikate ausstellt

Diese Revision wurde am 11. April 2014 15:20 von aasche erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Netzwerk, Server, Internet, Sicherheit, Verschlüsselung, Apache