Apache How to's
Self signed certificate
Oder auch selbst unterzeichnetes Zertifikat
Wozu? Um https (TLS / SSL) auf dem Heimserver oder virtuellem Server nutzen zu können ohne echte Domain zu haben.
Hat man eine Domain, sollte man sich über z.B. Let's encrypt ein echtes Zertifikat besorgen. Das geht kostenlos und wird von allen Browser unterstützt.
Mit OpenSSL installiert folgenden Befehl ausführen:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/webseite-selfsigned.key -out /etc/ssl/certs/webseite-selfsigned.crt
Wobei derzeit (Stand März 2020) die Schlüssellänge von 2048 (-newkey rsa:2048) ausreicht. Einer Länge von 4096 wird öfter mal genannt, aber nicht vorgeschrieben.
Die folgenden Fragen gilt es zu beantworten. An sich ist man recht frei, sinnvoll ist es aber bei Common Name die URL der Webseite, also z.B. www.webseite.local anzugeben.
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]:Land Locality Name (eg, city) []:Wohnort Organization Name (eg, company) [Internet Widgits Pty Ltd]:Abteilungsname Organizational Unit Name (eg, section) []:Development Common Name (e.g. server FQDN or YOUR name) []:www.webseite.local Email Address []:admin@webseite.local
Damit wäre das Zertifikat installiert.
Nun müssen wir Apache noch beibringen https und das Zertifikat zu nutzen.
Dazu am besten die bestehende default-ssl.conf in /etc/apache/sites-available nach webseite-ssl.conf kopieren. Diese dann editieren und so was wie im folgenden Beispiel daraus machen:
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin admin@webseite.local
ServerName www.webseite.local
DocumentRoot /var/www/webseite/public
<Directory /var/www/webseite/public>
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/webseite_error.log
CustomLog ${APACHE_LOG_DIR}/webseite_access.log combined
SSLEngine on
##
# Dies sind die zwei Dateien, die wir vorhin weiter oben erstellt haben.
##
SSLCertificateFile /etc/ssl/certs/webseite-selfsigned.crt
SSLCertificateKeyFile /etc/ssl/private/webseite-selfsigned.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
</IfModule>
Die "normale" Konfiguration webseite.conf erweitern wir noch um:
Redirect "/" "https://www.webseite.local/"
so das das dann so in etwa ausschaut:
<VirtualHost *:80>
ServerName www.webseite.local
DocumentRoot /var/www/webseite/public
<Directory /var/www/webseite/public>
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/webseite_error.log
CustomLog ${APACHE_LOG_DIR}/webseite_access.log combined
Redirect "/" "https://www.webseite.local/"
</VirtualHost>
Mit
a2enmod ssl
und
a2ensite webseite-ssl.conf
sowohl SSL als auch die Webseitenkonfiguration aktivieren.
Apache neuladen mit
systemctl reload apache2
Ab nun sollte die eigen Entwicklerseite unter https:// erreichbar sein. Der Browser wird noch mosern, dass es unsicher ist, die Seite zu öffnen. Hierzu muss man den jeweiligen Browser "überreden", das selbst erstellte Zertifikat zu akzeptieren. Bitte für den jeweiligen Browser nachlesen, ist normal eh im Fenster schon zu sehen als Meldung, wie
Warnung: Mögliches Sicherheitsrisiko erkannt
Unter Erweitert, Risiko akzeptieren oder etwas in der Art, kann man das Zertifikat dennoch akzeptieren (lassen). Man hat es ja selbst erstellt, kann man also auch vertrauen.
Läuft alles wie gewünscht kann man die Umleitung permanent machen und so nur noch verschlüsselten Verkehr erlauben:
Dazu
Redirect "/" "https://www.webseite.local/"
in
Redirect permanent "/" "https://www.webseite.local/"
ändern.
Mittels
apache2ctl configtest
kann man noch vor dem Neuladen bzw. Neustarten prüfen, ob die Konfiguration(en) fehlerfrei sind.
Danach dann mit
systemctl reload apache2
den Webserver die Konfigurationen neu laden lassen.
Viel Erfolg.