Apache How to's

Aus Froggis Wissenssammlung
Wechseln zu:Navigation, Suche

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.