Apache-HTTPS
HTTPS-Support für Apache
Wenn die NSLU aus dem Internet erreichbar sein soll, und Passwörter oder sonstige sensible Daten übertragen werden sollen, empfiehlt es sich dies per SSL-Verschlüsselung zu erledigen, um ein evtl. Abhören der Informationen zu vermeiden. Der installierte Apache-Webserver enthält Support für HTTPS (SSL-Verschlüsselung). Dies ist besonders empfehlenswert für Webanwendungen wie → Webmail, da hier ansonsten Passwörter im Klartext durchs Internet gehen würden.
Die Aktivierung von HTTPS erfolgt in zwei Stufen:
- Erzeugung der Notwendigen SSL-Zertifikate
- Aktivieren von HTTPS in den Konfigfiles.
Voraussetzung:
OpennSSL ist installiert und die eigene Zertifizierungsstelle CA ist eingerichtet (→ siehe Anleitung)
Erzeugung der Zertifikate
SSL-Verschlüsselung basiert auf Zertifikaten. Diese Zertifikate müssen erst angelegt und mit Installationsspezifischen Daten gefüllt werden. Im folgenden werden sog. "Selfsigned Certificates" verwendet. D.h. Die erzeugten Zertifikate werden selbst Unterschrieben. Solche Zertifikate werden von den Webbrowsern "angemeckert", da sie gefälscht sein könnten. Vertrauenswürdige, von einer Zertifizierungsstelle wie Verisign authentifizierte Zertifikate sind allerdings kostenpflichtig (meist jährliche Gebühr). Für einen privaten Webserver ist dies allerdings absolut nicht nötig. Selbstsignierte Zertifikate erfüllen hier ihren Zweck.
Wichtige Anmerkungen
- C (country:2 Zeichen)
- ST (State/Provinz)
- L (Locality/Ort)
- O (Organisation)
- OU (Organisational Unit)
- CN (Common Name)
Im folgenden müssen Schlüssel und Zertifikate für den eigenen Server erstellt werden. Zu beachten ist, dass der Common Name, Organisation und Organisational Unit jeweils unterschiedlich bei CA und Server gewählt werden (→ siehe auch Anmerkungen CA). Ansonsten kann es zu Problemen kommen, die bis dahin reichen, dass das erstellen der Zertifikate mit einem kryptischen Fehler abbricht.
Die Zertifikate haben - im Gegensatz zu den Keys - eine begrenzete Gültigkeitsdauer. Diese beträgt standardmäßig 365 Tage. D.h. Das Zertifikat wird nach einem Jahr ungültig und muß neu erstellt werden. Die Gültigkeit kann allerdings mit Hilfe des Parameters -days auf einen beliebigen Wert gesetzt werden.
Die Keys und Zertifikate haben ein Passwort zum Schutz vor fremden Zugriff. Für eine Serveranwendung ist dieser Schutz leider etwas hinderlich, da erst das Passwort eingegeben werden müßte, bevor der Apache-Server komplett starten würde. Dies wäre nach jedem Neustart von Apache und damit auch des Servers erforderlich. Deshalb wird hier der Passwortschutz von den Zertifiakten entfernt. D.h. wenn ein Fremder die Zertifikate in die Hände bekommen würde, könnte er evtl. die Kommunikation zwischen Server und Webbrowser belauschen.
Generierung SSL.Key
cd /opt/etc/ssl/key openssl genrsa -des3 -out server.key 1024 Hinweis: Passwort key_pwd muss vergeben werden
Entfernen des Passworts key_pwd:
mv server.key server.key.orig openssl rsa -in server.key.orig -out server.key chmod 600 server.key
Erzeugung Certificate Signing Request (CSR)
openssl req -new -key server.key -out server.csr
Folgende Eingaben sind notwendig (Bitte Organization Name und -Unit sowie Common Name abändern → Anmerkungen beachten):
Country Name: de State or Province Name: de Locality Name: . Organization Name: private Organizational Unit Name: server Common Name: domain Email Address: . A challenge password: . An optional company name: .
Signierung des Server-Zertifikates
Folgendes File anlegen:
cd ../ca
Signieren (Abfragen mit y bestätigen):
openssl ca -config ca.config -out ../cert/server.crt -infiles ../key/server.csr
Verifizieren:
openssl verify -CAfile ca.crt ../cert/server.crt
Ausgabe sollte folgendermaßen aussehen:
../cert/server.crt: OK
Aufräumen
Temporäre Dateien entfernen:
rm -f ca.db.serial.old rm -f ca.db.index.old
Konfiguration des Apache
Startscript
Um SSL verwenden zu können, muss das Apache Startscript leicht abgeändert werden:
vi /opt/etc/init.d/S80apache
Der vorhandene Startbefehl sollte auskommentiert werden (# voranstellen)
/opt/sbin/httpd -k restart
und folgender neuer Eintrag eingefügt werden:
/opt/sbin/httpd -DSSL -k restart
Apache Konfigurationsfile
Öffnen der Apache Konfigurationsdatei:
vi /opt/etc/apache2/httpd.conf
Folgenden Eintrag suchen:
#Include /opt/etc/apache2/extra/httpd-ssl.conf
Diesen folgendermaßen abändern (Kommentarzeichen # entfernen und Pfad anpassen):
Include /opt/etc/apache2/extra/httpd-ssl.conf
Appache SSL Konfigurationsfile
vi /opt/etc/apache2/extra/httpd-ssl.conf
Folgende Einträge auskommentieren (Kommentarzeichen # entfernen):
SSLRandomSeed startup file:/dev/urandom 512 SSLRandomSeed connect file:/dev/urandom 512
Folgende Einträge bearbeiten (Hinweis: der Eintrag ServerName und CN des Serzertifikates müssen exakt übereinstimmen (→ siehe Certificate Signing Request))
ServerName Domain:443 - z.B. schiele.homelinux.org:443 ServerAdmin email-Adresse des Administrators SSLCertificateFile "/opt/etc/ssl/cert/server.crt" SSLCertificateKeyFile "/opt/etc/ssl/key/server.key"
Funktionstest
Die Funktion des HTTPS-Protokolls kann auf zweierlei Art und Weise erfolgen:
- Kommandozeile
- Webbrowser. Dies setzt allerdings voraus, dass bereits eine Webseite installiert ist
Test via Kommandozeile auf der NSLU
openssl s_client -connect localhost:443 -state -debug
Dieser Befehl sollte ohne Fehler ablaufen und eine Menge Informationen bgl. der Zertifiakte ausspucken.
Test via Webbrowser
Webbrowswer öffnen und https://IP_der_NSLU/phpinfo.php eingeben. Der Webbrowser gibt eine Warnung aus, dass das Zertifikat nicht vertrauenswürdig ist (da es selbst signiert wurde, anstatt von einer bekannten Certification Authority). Warnung bestätigen (entweder Zertifikat permanent aktivieren, oder nur für aktuelle Sitzung, je nach Geschmack). Eine weitere Warnung wird erscheinen, wenn der Servername in der Konfiguration die (Dynamic DNS) Domain enthält, aber im Webbrowser die interne IP-Adresse eingeben wurde. D.h. angesurfte Webadresse stimmt nicht mit dem Zertifikat überein. Warnung ebenfalls bestätigen.
Nun sollte die Webseite erscheinen.