SSL-Zertifikat unter Apache für Windows anfragen und einrichten

Um unter Apache für Windows eine Website mit HTTPS zu übertragen, nachfolgende Schritte ausführen:

A) CSR anfordern

  1. OpenSSL herunterladen und nach „C:\Program Files\OpenSSL-Win32“ installieren.
  2. Ein CSR erstellen:
    1. Befehlszeile öffnen
    2. cd C:\Ablage
    3. "C:\Program Files\OpenSSL-Win32\bin\openssl.exe" req -nodes -new -newkey rsa:4096 -sha256 -out csr.pem
    4. Dann alle Felder ausfüllen. Beim „Common Name“ den Domain-Namen eintragen. Für Wildcard-Zertifikate ein „*“ am Anfang, also z.B. *.example.org.
  3. Mit dem CSR dann bei einem Anbieter, z.B. SSL-Trust, ein Zertifikat anfragen.

B) Apache vorbereiten

  1. In der „httpd.conf“-Datei den Listen auf den 443-Port erweitern, z.B. Listen 213.174.38.113:443 ergänzen.
  2. SSL-Modul einbinden via „httpd.conf“-Datei: LoadModule ssl_module modules/mod_ssl.so.
  3. In der einzelnen Konfigurationsdatei für den virtuellen host entsprechend auf beide Ports lauschen, z.B. <VirtualHost 213.174.38.113:80> und <VirtualHost 213.174.38.113:443> als zwei virtuelle Hosts ergänzen.

C) SSL-Zertifikat speichern und referenzieren

  1. Enthaltene Zertifikate, den zuvor erstellten private Key sowie optional das CA-Bundle jeweils entsprechend in die Zielordner kopieren.

  2. SSL-Engine einschalten:

    <IfModule mod_ssl.c>
        SSLEngine on
        SSLCompression off
        SSLCertificateKeyFile C:/Ablage/ssl.key/example.com.key
        SSLCertificateFile C:/Ablage/ssl.crt/example.com.crt
        SSLCertificateChainFile C:/Ablage/ssl.crt/example.com.ca-bundle
        SetEnvIf User-Agent ".*MSIE.*" \
          nokeepalive ssl-unclean-shutdown \
          downgrade-1.0 force-response-1.0
    </IfModule>
    
  3. Alles von HTTP auf HTTPS umleiten: RewriteRule ^/?(.*) https://www.mein-server.de/$1 [R,L]

  4. Apache neu starten.

D) Testen

  1. Die Website im Browser aufrufen.
  2. Das SSL-Zertifikat prüfen lassen. Auf die Schnelle bei Digicert, intensiver bei Qualys SSL Labs.

E) Nach IIS verschieben

Speziell bei einem Wildcard-Zertifikat kann es Sinn machen, dieses in Apache und in IIS zu verwenden.

Auch das ist möglich:

  1. PFX-Datei mit OpenSSL erstellen: openssl pkcs12 -export -out mydomain.pfx -inkey mydomain.key -in mydomain.crt -certfile intermediateCA.crt.
  2. PFX-Datei als Zertifikat in Windows importieren (über die MMC-Zertifikate-Konsole).
  3. Zertifikat im IIS-Manager auswählen und einer Website zuweisen.

F) Aus einem IIS-PFX-Zertifikat-Export Dateien für Apache generieren

Auch anders herum geht es. Also in IIS ein Zertifikat exportieren und dann in Apache verwenden.

Dazu muss das Zertifikat entsprechend aufbereitet werden:

  1. Zertifikat im IIS-Manager in eine *.pfx-Datei exportieren.

  2. Mit OpenSSL die PFX-Datei in eine *.cer- und eine *.key-Datei umwaendeln:

    openssl pkcs12 -in domain.pfx -clcerts -nokeys -out domain.cer
    openssl pkcs12 -in domain.pfx -nocerts -nodes  -out domain.key   
    

Auf meinen eigenen Websites musste ich nur die .key-Datei generieren, die .cer-Datei habe ich nicht benötigt.

G) Sicherheit einstellen

Bei SSL kann man viel falsch konfigurieren, serverseitig, speziell die Cipher-Suits.

Danke diesem Artikel konnte ich das sehr gut konfigurieren und hier dann testen.

Ein Beispiel-Ausschnitt aus einer .htacess-Datei nachfolgend:

<IfModule mod_ssl.c>
    SSLEngine on
    SSLCompression off
    SSLCertificateKeyFile C:/Myfolder/my-cert.key
    SSLCertificateFile C:/Myfolder/my-cert.crt
    SSLCertificateChainFile  C:/Myfolder/my-cert.ca-bundle
    SetEnvIf User-Agent ".*MSIE.*" \
      nokeepalive ssl-unclean-shutdown \
      downgrade-1.0 force-response-1.0
    SSLProtocol all -SSLv3
    SSLProxyProtocol all -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'
</IfModule>    

SharePoint-Systemhaus StuttgartTest Management SoftwareHomepage-Baukasten mit Shop

hmm, leider bekomme ich hier ein Fehler:

unable to find ‚distinguished_name‘ in config
problems making Certificate Request
3324:error:0E06D06A:configuration file routines:NCONF_get_string:no conf or envi
ronment variable:crypto\conf\conf_lib.c:272:

1 „Gefällt mir“

Was steht denn in Deiner „openssl.cnf“-Datei?

Meine liegt unter „C:\Program Files\Apache24\conf\openssl.cnf“ und enthält unter anderem:

[ req ]
default_bits		= 2048
default_keyfile 	= privkey.pem
distinguished_name	= req_distinguished_name
attributes		= req_attributes
x509_extensions	= v3_ca	# The extentions to add to the self signed cert

Wobei ich nicht weiß, ob ich das distinguished_name dort hinein geschrieben habe.

Ich nutze Apache 2.4.18 (Win32) und OpenSSL/1.0.2e.

Auf Super User gibt es auch noch diese verwandte Frage samt Antwort.

Hallo Uwe,

Nun ja, ich habe openssllight gemäss Deinem Link heruntergeladen (32-bit und 64bit). Dann hab ich das ganze aus dem bereits installierten Apache24 (2.4.23 64Bit) versucht. Nachfolgend der Eintrag, welcher in allen 3 config-files identisch ist:

[ req ]
default_bits		= 2048
default_keyfile 	= privkey.pem
distinguished_name	= req_distinguished_name
attributes		= req_attributes
x509_extensions	= v3_ca	# The extentions to add to the self signed cert

Das Teil steigt unmittelbar nach Generierung des Keys aus…

Gruss

Peter

Ggf. hat Dein Apache kein OpenSSL mit rein kompiliert?

Bei mir schaut das so aus:

Hallo Uwe,

Eigentlich hab ich schon die SSL-Version heruntergeladen, allerdings die SSL-Module in der HTTP.conf (noch) deaktiviert. Kann es daran liegen? Dachte, das läuft eigenständig und greift nur auf die ssl.conf zu

Hmm…

Bei mir steht da:

Apache/2.4.23(Win64)PHP/5.6.26

Müssen die Module wirklich aktiviert sein, damit die Zertifikatsanfrage funktioniert?

Gruss

Peter

Also für Schritt A) hätte ich jetzt auch erwartet, dass das erst mal unabhängig von Apache ist.

Hallo Uwe,

Hast Du noch eine Idcee bezüglich Schritt A, warum das nicht geht?

Gruss

Peter

Du könntest mal versuchen auf einer VMware ein neues Windows hochzuziehen und dort die Schritte ausprobieren?

Ggf. ist ja genau in Deinem jetzigen System aus Seiteneffekt-Gründen der Schritt irgendwie blockiert/anders?

Siehe auch: