Apache Webserver with SSL on Windows Diese Konfiguration geht davon aus, dass man keine sperate CA Stelle benötigt. Mit OpenSSL ist es ohne weiteres möglich, dass man selber an die Stelle der CA treten kann. Der Apache wird auf Port 443 und mit Auslieferung eines Zertifikats konfiguriert. Das heißt, die URL beginnt nicht mit HTTP, sondern mit HTTPS. Schritt 1: Unter der URL http://httpd.apache.org/ den Apache in der Version 2.2.4 herunterladen und z.b.: unter C:\Apache-2.2.4 installieren. Wichtig ist, dass wir die Version mit OpenSSL nehmen, sonst müssten wir uns später noch das SSL Modul herunterladen. Schritt 2: Hat man keinen Apache mit OpenSSL installiert, dann muss die Software unter http://www.slproweb.com/products/win32openssl.html heruntergeladen und installiert werden. Schritt 3: Bevor wir die httpd.conf anpassen, wollen wir noch ein Zertifikat ertellen. Dazu müssen die Dateien ssleay32.dll und libeay32.dll im Ordner C:\WINDOWS\system32 liegen. Im Prinzip benötigt man keine eigene CA (Certification Authority). Jedoch wird davon ausgegangen, dass in einem späteren Projektverlauf diese Anwenderanforderung besteht. Daher erstellen wir zuerst eine 3 Jahre gültige CA, zum unterschreiben unserer Zertifikate, welche die Echtheit mit der digitalen Unterschrift bezeugt. Das cacert.pem sollte man bei einer späteren Verbreitung in eine Datei mit der Endung.crt umwandeln. Dann kann Windows etwas damit anfangen. Für PEM wurde das Passwort test vergeben. openssl req -new -x509 -days 1096 -keyout cakey.pem -out cacert.pem
Mit dem folgenden Befehl erhalten wir ein Certificate Request in der Datei server.csr. Die Fragen sollte man korrekt beantworten, die wichtigsten sind CN (Common Name). Hier muss die IP oder der Domänename eingetragen werden. openssl req -new -keyout server.key -out server.csr Anschließend unterschreiben wir noch mit unserer eigenen CA, wobei das Zertifiakt eine Gültigkeit von 1 Jahr hat. openssl x509 -req -in server.csr -CA cacert.pem -CAkey cakey.pem - CAcreateserial -out server.crt -days 365
Jetzt kopieren wir noch den Schlüssel, damit dieser nicht beim Start des Apache abgefragt wird. copy server.key server.key.tmp openssl rsa -in server.key.tmp -out server.key Den Key (privater Schluessel) und das unterschriebene Zertifikat (öffentlicher Schlüssen), wird noch zusammengepackt und fuer Windows ins pkcs12 Format umgewandelt. copy /b server.key + server.crt servercert.pem openssl pkcs12 -export -in servercert.pem -out clientcert.p12 -name "localhost" Zum Abschluß prüfen wir noch, ob der Modulus passt. Beide Zahlenkolonnen müssen stimmen, ist jeweils rot markiert. openssl x509 -noout -text -in server.crt
openssl rsa -noout -text -in server.key Hat man das server.crt im Browser importiert, dann sieht man folgende Einträge. Hier sieht man sehr deutlich, dass wir eine eigene CA verwendet haben, denn unter Herausgegeben von steht MM Test Company drin. Unter Herausgegeben für, sieht man, dass das Zertifikat für den XYZ Company gedacht ist.
Schritt 4: Jetzt haben wir ein Zertifiakt und können die httpd.conf angepassen. Wir entfernen bzw. fügen das SSL Module hinzu mit der folgenden Zeile LoadModule ssl_module modules/mod_ssl.so Der Port 80 wird durch Port 443 ersetzt. Listen 443 Ebenso kommen folgende Zeilen an das Dateiende. SSLEngine On SSLMutex default SSLSessionCache dbm:c:/apache-2.2.4/logs/ssl_gcache_data SSLCertificateFile conf/ssl/server.crt SSLCertificateKeyFile conf/ssl/server.key Schritt 5: Nun starten wir den Dienst unter Windows neu und prüfen den Erfolg in dem wir im Browser https://localhost eingeben. Wenn ein Zertifikat angeboten wird, dann haben wir alles richtig gemacht und es wird folgende Seite im Browser geladen. Ebenso ist es möglich, dass man vorher das Zertifiakt im Browser importiert, dann kommt keine Abfrage, ob man dem Zertifiakt vertrauen möchte.