Einrichtung einer sicheren https Verbindung
Voraussetzungen
Es wird ein Zertifikat und ein privater Schlüssel im PEM-Format (BASE64 kodierte Zeichenkette) benötigt.
Außerdem muss 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.
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.
Extraktion eines PFX-Zertifikatsspeicher
Am Ende der Voraussetzungen, steht mindestens das Zertifikat und der private Schlüssel zur Verfügung.
Ein Beispiel eines Zertifikats:
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.
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 eines PFX - Zertifikatsspeicher
Wenn das Zertifikat, die Zertifikatskette sowie der private Schlüssel (ohne Passphrase) für den Apache Webserver als Zertifikatsspeicher (PFX / PKCS#12) vorliegt, kann diese Batch (ohne jegliche Gewährleistung) ausgeführt werden, um an die notwendigen Einzelteile zu gelangen.
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.
SET OPENSSL=D:\DEXPRO\TOOLS\OPENSSL\openssl.exe
SET PFXFILE=D:\DEXPRO\ZERTIFIKATE\ORIGINALS\KUNDENZERTIFIKAT.pfx
SET OUTPUTFOLDER=D:\DEXPRO\ZERTIFIKATE\OUT\
SET OUTPUTFILENAME=KONVERTIERTES_KUNDENZERTIFIKAT
SET REMOVEPASSPHRASE=true
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:
Ergebnis der Batch (Bestandteile des PFX)
Am Ende der Extraktion sind die folgenden Dateien im definierten Ausgabeordner zu finden:
- 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:
Batch Script Quellcode
Ohne jegliche Gewährleistung oder Anspruch auf Support.
@ECHO off
ECHO - - - - - - - - - - - - - - - - - - - - - - - - -
REM VARIABLES TO SET!
SET OPENSSL=D:\DEXPRO\TOOLS\OPENSSL\openssl.exe
SET PFXFILE=D:\DEXPRO\ZERTIFIKATE\ORIGINALS\KUNDENZERTIFIKAT.pfx
SET OUTPUTFOLDER=D:\DEXPRO\ZERTIFIKATE\OUT\
SET OUTPUTFILENAME=KONVERTIERTES_KUNDENZERTIFIKAT
REM REMOVE PEM PASSPHRASE? -> TRUE / FALSE
SET REMOVEPASSPHRASE=true
REM START DER EXTRAKTION
ECHO EXTRACTION OF THE INDIVIDUAL COMPONENTS OF A PFX CERTIFICATE STORE
ECHO Setting the variables ...
ECHO openssl.exe: [%OPENSSL%]
ECHO PFX certificate store: [%PFXFILE%]
ECHO Destination folder: [%OUTPUTFOLDER%]
ECHO Destination file name: [%OUTPUTFILENAME%]
ECHO - - - - - - - - - - - - - - - - - - - - - - -
ECHO Checking the variables ...
if exist %OPENSSL% (
ECHO openssl.exe found
) else (
ECHO openssl.exe [%OPENSSL%] not found - please adjust the path!
goto ERROREND
)
if exist %PFXFILE% (
ECHO Customer certificate store [%PFXFILE%] found
) else (
ECHO Customer certificate store [%PFXFILE%] not found - please adjust the path!
goto ERROREND
)
if exist %OUTPUTFOLDER% (
ECHO Destination folder [%OUTPUTFOLDER%] found
) else (
ECHO Destination folder [%OUTPUTFOLDER%] not found - please adjust the path!
goto ERROREND
)
if "%OUTPUTFILENAME%"=="" (
ECHO No destination filename was specified!
goto ERROREND
)
ECHO - - - - - - - - - - - - - - - - - - - - - - -
ECHO Start extraction ...
ECHO PRIVATE KEY EXTRACTION
%OPENSSL% pkcs12 -in %PFXFILE% -nocerts -out %OUTPUTFOLDER%%OUTPUTFILENAME%.key
ECHO CERTIFICATE EXTRACTION
%OPENSSL% pkcs12 -in %PFXFILE% -clcerts -nokeys -out %OUTPUTFOLDER%%OUTPUTFILENAME%.crt
ECHO CERTIFICATE CHAIN EXTRACTION
%OPENSSL% pkcs12 -in %PFXFILE% -cacerts -nokeys -chain -out %OUTPUTFOLDER%%OUTPUTFILENAME%_chain.pem
REM REMOVE PEM PASSPHRASE
IF "%REMOVEPASSPHRASE%"=="true" (
ECHO REMOVE PEM-PASSPHRASE
%OPENSSL% rsa -in %OUTPUTFOLDER%%OUTPUTFILENAME%.key -out %OUTPUTFOLDER%%OUTPUTFILENAME%_nopass.key
) ELSE (
ECHO PEM-Passphrase is not removed
)
GOTO END
:END
ECHO - - - - - - - - - - - - - - - - - - - - - - -
ECHO EXTRACTION COMPLETED!
ECHO - - - - - - - - - - - - - - - - - - - - - - - - -
PAUSE
EXIT
:ERROREND
ECHO - - - - - - - - - - - - - - - - - - - - - - -
ECHO EXTRACTION FAILED!
ECHO PLEASE CHECK ALL PARAMETERS!
ECHO - - - - - - - - - - - - - - - - - - - - - - - - -
PAUSE
EXIT
Alternative Konfiguration
Einrichtung des Virtuellen Hosts
D:\SQUEEZE\apache\conf\extra\httpd-vhosts.conf
eintragen:# 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.
No Comments