Für verschiedene weitere Systeme wird auf dem Banana Pi NAS ein Apache Webserver gebraucht, daher zeige ich hier die Installation desselben. Diese Anleitung lässt sich auch auf den Raspberry Pi und auf andere Debian- bzw. Ubuntu-basierte Systeme übertragen.
Installation der Pakete
Die erforderlichen Pakete installiert man ganz einfach mit:
sudo apt-get install apache2 apache2-doc apache2-utils openssl
Das ist auch schon alles an Paketen. Das Paket openssl
könnte bereits vorhanden sein und es wird auch nur gebraucht wenn, wie im folgenden Schritt gezeigt, verschlüsselte Verbindungen unterstützt werden sollen.
Generierung von Zertifikaten
In diesem Schritt werden die Zertifikate erstellt, die gebraucht werden um verschlüsselte Verbindungen aufzubauen. Zuerst wird ein privater Schlüssel erstellt:
openssl genrsa -out server.key 2048
Wer paranoider ist, kann in der obigen Zeile statt des 2048bit-Schlüssels auch einen 4096bit-Schlüssel erzeugtn.
Dann wird der Zertifikatsantrag erzeugt:
openssl req -new -key server.key -out server.csr
Dabei stellt openssl einige Fragen:
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]:DE State or Province Name (full name) [Some-State]:<EUER_BUNDESLAND> Locality Name (eg, city) []:<EURE_STADT> Organization Name (eg, company) [Internet Widgits Pty Ltd]:<EURE_FIRMA> Organizational Unit Name (eg, section) []: Common Name (e.g. server FQDN or YOUR name) []:<DOMAIN_NAME> Email Address []:<EURE_EMAILADRESSE> Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:<EURE_FIRMA>
Falls ihr euer Zertifikat von einer offiziellen Stelle unterschreiben lassen möchtet, dann sollten die obigen Angaben der Wahrheit entsprechen. Falls nicht, ist es ziemlich egal was darin steht. Achten solltet ihr nur daraus, dass beim Common Name
eure Domain steht, falls ihr eine besitzt (z.B. als DynDNS-Domain).
Nun habt ihr in der Datei server.csr
einen „Certificate Signing Request", also einen Zertifikatsantrag. Den kann man selbst signieren oder von einer offiziellen Stelle signieren (also unterschreiben) lassen. Signiert man ihn selbst, dann zeigt ein Browser, wenn man den Server aufruft (z.B.: https://EUER_SERVER/) ein fehlerhaftes Zertifikat an. Das ist im Heimnetzwerk nicht schlimm, denn die Verbindung ist trotzdem verschlüsselt - und ihr vertraut demjenigen ja, der das Zertifikat erzeugt hat (nämlich euch selbst). Soll der Server aber für Fremde erreichbar sein, dann sieht das immer etwas blöd aus, wenn das Zertifikat nicht korrekt ist. Daher kann man sich zum Beispiel bei StartSSL ein kostenloses, unterschriebenes Zertifikat ausstellen lassen. Hierfür benötigt man die oben erstellte CSR-Datei, die dann von StartSSL unterschrieben und als CRT-Datei (für Zertifikat) zurückgeliefert wird.
Weiterhin stellt StartSSL auch noch ein sogenanntes ChainFile zur Verfügung. Das braucht ihr und es muss in das Verzeichnis /etc/ssl/certs/ kopiert werden:
sudo cp sub.class1.server.ca.pem /etc/ssl/certs/sub.class1.server.ca.pem
Möchtet ihr euer Zertifikat selbst unterschreiben (und stören euch die Fehlermeldungen von Browsern später nicht), dann geht das so:
openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt
Dieses Zertifikat ist nun für 10 Jahre (3650 Tage gültig).
Als nächstes kopiert ihr die fertigen Dateien in die korrekten Verzeichnisse (als root - und Verzeichnisse erstellen, falls sie noch nicht existieren):
sudo cp server.key /etc/ssl/private/server.key sudo cp server.crt /etc/ssl/certs/server.crt
Apache Modul und Site
Damit TLS/SSL mit dem Apache funktioniert muss das entsprechende Modul geladen und die korrespondierende Serverkonfiguration aktiviert werden. Dies erledigen folgende Kommandos:
sudo a2enmod ssl sudo a2ensite default-ssl
Apache Konfiguration
In der Standardausführung verwendet Apache für die SSL/TLS-Konfiguration die Datei default-ssl
. Diese wird nun editiert:
sudo vi /etc/apache2/sites-available/default-ssl
Statt dem vi
kann natürlich auch ein anderer Editor verwendet werden - ganz nach eurem Geschmack.
Folgendes muss nun in diese Datei (im Abschnitt VirtualHost *:443
):
SSLEngine on SSLCertificateFile /etc/ssl/certs/server.crt SSLCertificateKeyFile /etc/ssl/private/server.key SSLCertificateChainFile /etc/ssl/certs/sub.class1.server.ca.pem SSLProtocol All -SSLv2 -SSLv3 SSLHonorCipherOrder On SSLCipherSuite EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA:EECDH:EDH+AESGCM:EDH:ECDH+AESGCM:ECDH+AES:ECDH:HIGH:MEDIUM:!RC4:!3DES:!CAMELLIA:!SEED:!aNULL:!MD5:!eNULL:!LOW:!EXP:!DSS:!PSK:!SRP
Diese Konfiguration macht folgendes:
- Zeile 1: Schaltet SSL ein
- Zeilen 3-5: Sagen dem Apache wo die erforderlichen Schlüssel und Zertifikate liegen
- Zeilen 7-9: Konfigurieren die SSL-Einheit so, dass nur neue, starke Verschlüsselungen eingesetzt werden.
Sind die Zertifikate an ihrem Platz, wurden die Module und Site-Konfigurationen aktiviert und ist die default-ssl
gespeichert, dann muss man nur noch den Apache neu starten und alles sollte laufen:
sudo service apache2 restart
Danach könnt' ihr euren neuen, sicheren Apache mit https://IP_ADRESSE_DES_RECHNERS/ aufrufen. Ach ja - falls ihr dem Apache ein paar Dateien zur Verfügung stellen wollt, die er ausliefern soll, legt sie unter /var/www/
ab!