Skip to main content

Einrichtung einer sicheren https Verbindung

Um eine sichere Verbindung einzurichten muss im Apache ein neuer virtueller Host eingerichtet werden.

Voraussetzungen

Voraussetzungen

Für die Einrichtung der https Verbindung

Es wird eineein Zertifikat und ein privater Schlüssel im PEM PEM-Format (BASE64 kodierte Zeichenkette) benötigt.

Hier

Außerdem einemuss das Zertifikat mit mindestens dem SHA-256 Signaturalgorithmus signiert sein.

All major webrowser vendors ceased acceptance of SHA-1 SSL certificates in 2017.

Microsoft has discontinued SHA-1 code signing support for Windows Update in August 7, 2020.

- Wikipedia (SHA-1)

Ein Zertifikatsspeicher (PFX / PKCS#12) kann ebenfalls verwendet werden.
Dazu muss das Zertifikat in seine Einzelteile (Zertifikat, privater Schlüssel und ggf. der Zertifikatskette) zerlegt werden.
Siehe unten!

Am Ende der Voraussetzungen, steht mindestens das Zertifikat und der private Schlüssel zur Verfügung.
Ein Beispiel eines Zertifikats im PEM Format

Zertifikats:

image-1592219559682.pngimage-1592219559682.png

Sobald die Dateien vorliegen kann mit der Einrichtung des Virtuellen Hosts begonnen werden.

Konfiguration Webserver

httpd-vhosts.conf - Konfiguration

Das Zertifikat, den privaten Schlüssel des Zertifikats sowie eine etwaige Zertifikatskette unter dem Apache Konfigurationsordner SQUEEZE\apache\conf\ssl ablegen.

httpd-vhosts.conf - Konfiguration

Der virtuelle Host für den SSL Port *:443 muss in der Datei SQUEEZE\apache\conf\extra\httpd-vhosts.conf eingetragen werden.

Die vhosts.conf Konfiguration muss in der httpd.conf geladen werden, damit die vhosts in der Konfiguration des Webserver berücksichtigt werden (bei SQUEEZE bereits eingerichtet).

<VirtualHost *:443>
  ServerName host.domain.net
  ServerAdmin admin@host.domain.net
  ServerSignature Off
  SSLEngine on
  SSLCertificateFile "conf/ssl/server.crt"
  SSLCertificateKeyFile "conf/ssl/server.key"
  SSLCertificateChainFile "conf/ssl/fullchain.pem"
  # DER FOLGENDE TEIL WIRD NUR BEI EINEM PROXY BENÖTIGT
  # SSLProxyEngine On
  # SSLProxyVerify none
  # SSLProxyCheckPeerCN off
  # SSLProxyCheckPeerName off
  # SSLProxyCheckPeerExpire off
</VirtualHost>

Die Pfade zum Zertifikat, den privaten Schlüssel des Zertifikats sowie eine etwaige Zertifikatskette sind entsprechend zu setzen.

Der host.domain.net  Wert ist durch den entsprechenden Hostnamen zu ersetzen.

Zuletzt den Virtuellen Host (VirtualHost *:80) auskommentieren.

httpd.conf - Konfiguration

Der Webserver muss nun auf den SSL (HTTPS) Port hören.

Dies stellen wir in der Date apache\conf\httpd.conf ein.

#
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses.
#
#Listen 12.34.56.78:80
Listen 80
Listen 443

Weiter unten in der Konfigurationsdatei müssen wir noch das SSL Modul suchen und dieses einkommentieren.

LoadModule ssl_module modules/mod_ssl.so

 

Troubleshooting

Die Seite kann auf den Clients nicht aufgerufen werden?

Handelt es sich um eine Intranet-Domäne (*.local bspw.), dann muss die Server FQDN (URL) (https://servername.domäne) in den Internetoptionen der Clients bei den Intranetsites hinzugefügt werden. Sollte dies nicht funktionieren, ist die Seite bei den Vertrauenswürdigen Sites unterzubringen.

image-1610977984197.png

Seit den Windows Servern 2019 (und Windows 10) sind die TCP Ports 443, 8443 in der Firewall standardmäßig nicht freigegeben.

Dazu sind also entsprechende eingehende und ausgehende Firewallregeln zu definieren.

Extraktion der PFX-Zertifikatsbestandteile

Wenn das Zertifikat, die Zertifikatskette sowie der private Schlüssel (ohne Passphrase) für etwa den Tomcat oder Apache Webserver benötigt wird, kann diese Batch ausgeführt werden (siehe auch SSL Konfiguration von Webservern).

Dazu werden die OpenSSL Binaries benötigt (seit SQUEEZE 1.10 ausgeliefert).

Setzen der Batch-Variablen

Es müssen im Batch-Script die folgenden Variablen gesetzt werden, damit das Script fehlerfrei arbeiten kann.

 

Dabei werden die Pfade zu OpenSSL, dem Ausgabeordner und dem PFX Zertifikatsspeicher (PFX), sowie die Namen der zu erstellenden Zertifikatsbestandteile angegeben. Damit der private Schlüssel von etwa dem Apache Webserver gelesen werden kann, muss der private Schlüssel ohne PEM-Passphrase vorliegen. Dazu kann das Flag REMOVEPASSPHRASE=true gesetzt werden.

Ausführen der Batch

Einfach den Anweisungen der Batch-Datei folgen:

image-1610978908767.png

Ergebnis der Batch (Bestandteile des PFX)

Am Ende der Extraktion sind die folgenden Dateien im definierten Ausgabeordner zu finden:

image-1610978990934.png

  • Das eigentliche Zertifikat (*.crt)
  • Der private Key (mit PEM-Passphrase) (*.key)
  • Der private Key (ohne PEM-Passphrase) (*_nopass.key)
  • Die Zertifikatskette (*_chain.pem).
    Ist diese Datei leer, so gibt es in dem Zertifikatsspeicher keine auszugebende Kette.

Bei allen Dateien müssen im Anschluss die von OpenSSL generierten Informationen entfernt werden:

image-1610979121862.png

Script Quellcode

Alternative Konfiguration

Einrichtung des Virtuellen Hosts

In der Datei "D:\SQUEEZE\apache\conf\extra\httpd-vhosts.conf" eintragen:
<VirtualHost *:443>
    ServerName host.domain.net
    ServerAdmin admin@host.domain.net
    ServerSignature Off
    SSLEngine on
    SSLProxyEngine On
    SSLCertificateFile "conf/ssl.crt/server.crt"
    SSLCertificateKeyFile "conf/ssl.key/server.key"
    SSLCertificateChainFile "conf/ssl.key/fullchain.pem"
    SSLProxyVerify none
    SSLProxyCheckPeerCN off
    SSLProxyCheckPeerName off
    SSLProxyCheckPeerExpire off
    ErrorLog logs/host.domain.net_error.log
    CustomLog logs/host.domain.net_access.log combined
</VirtualHost>

Der host.domain.net  Wert ist durch den entsprechenden Hostnamen zu ersetzen.

Alternative Konfiguration:
LoadModule ssl_module modules/mod_ssl.so
<VirtualHost *:8443>
ServerName host.domain.net
DocumentRoot "${SQZROOT}\htdocs\public"
<IfModule mod_ssl.c>
SSLEngine on
SSLCertificateKeyFile "conf/ssl/package.key"
SSLCertificateFile "conf/ssl/package.cer"
SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
</IfModule>
</VirtualHost>

Der host.domain.net  Wert ist durch den entsprechenden Hostnamen zu ersetzen.

Konvertierung einer  pkcs12 Datei in das PEM Format

Sollte eine pkcs12 Datei vorliegen, muss diese zuvor in das PEM Format konvertiert werden.
Dazu müssen folgende Schritte durchgeführt werden Quelle https://www.tbs-certificates.co.uk/FAQ/en/346.html:

  1. Konvertieren der pkcs12 Datei in das PEM Format
    openssl pkcs12 -in yourpkcs12.pfx -out package.pem -nodes
  2. Kopieren der package.pem in die 3 Zieldateien 
    cp package.pem mykey.key
    cp package.pem mycert.cer
    cp package.pem mychain.txt
  3. Editieren der Dateien um den jeweils benötigten Block zu behalten
    Hinweis: Unter Windows muss sichergestellt werden, dass die Linux Zeilenumbrüche erhalten bleiben!
    In mykey.key den Block beginnend mit "PRIVATE KEY" beibehalten, den Rest löschen
    In mycert.cer den Block beginnend mit "BEGIN CERTIFICATE" beibehalten (Übereinstimmung des Kommentars mit dem Hostnamen)
    In mychain.txt alle Blöcke beginnend mit "BEGIN CERTIFICATE" beibehalten, deren Name nicht mit dem Hostnamen übereinstimmen.