Installation des Apache mit SSL/TLS auf dem Banana Pi NAS

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!


wallpaper-1019588
Thomann Angebote zum 70-jährigen Jubiläum
wallpaper-1019588
[Comic] Saga [11]
wallpaper-1019588
CHILDEATH: Action-Reihe findet ihr Ende
wallpaper-1019588
Chongqing: Megacity am Jangtse