Apache und OpenSSL

Es war mal wieder so weit – das SSL Zertifikat meines Webservers ist abgelaufen. Nicht nur der paar Fehlermeldungen wegen empfielt es sich, ein neues Zertifikat zu besorgen.

Dazu gibt es zwei Möglichkeiten: Zum einen kann man bei offiziellen Zertifizierungsstellen einen Antrag stellen, oder wie ich ein eigenes Zertifikat generieren. Letzteres ist jedoch für die offizielle Nutzung nicht empfehlenswert.

Schritt 1: Der private Schlüssel

Wir verwenden einen RSA Key mit 1024 bit und einer Triple-DES Verschlüsselung. Um den Key in als ASCII Text abspeichern zu können, muss er im PEM Format vorliegen.

openssl genrsa -des3 -out server.key 1024

Generating RSA private key, 1024 bit long modulus
.........................................................++++++
........++++++
e is 65537 (0x10001)
Enter PEM pass phrase:
Verifying password - Enter PEM pass phrase:

Schritt 2: CSR (Certificate Signing Request)

Der CSR ist sowas wie das Antragsformular, mit dem man zu den Zertifizierungsstellen wie Verisign oder Thawte pilgert, um es überprüfen zu lassen – oder eben wie ich hier ein eigenes Zertifikat baut.

Beim Generieren des CSR wird man zwangsläufig über die Frage nach dem „Common Name (e.g., YOUR name)“ stolpern. Die richtige Antwort hier ist die URL für den das Zertifikat verwendet werden soll, da ansonsten der Webbrowser eine Warnung ausspuckt. Für mein Blog wäre das hier ‚my.stargazer.at‘.


openssl req -new -key server.key -out server.csr

Country Name (2 letter code) [AT]:AT
State or Province Name (full name) [Feldkirch]:Feldkirch
Locality Name (eg, city) [Nofels]:Nofels
Organization Name (eg, company) [My Company Ltd]:STARGAZER systems
Organizational Unit Name (eg, section) []:IT Core services
Common Name (eg, your name or your server's hostname) []:my.stargazer.at
Email Address []: *****@******.***
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Schritt 3: Das Passwort vom Zertifikat entfernen

Auch wenn dir dieser Schritt nun sinnlos oder gar wahnsinnig erscheint, ist er dennoch nötig. Um dies zu verstehen, sehen wir uns einmal einen Webserver an. Man startet ihn im entsprechenden Runlevel und dann muss das Ding laufen ohne dumm rumzumeckern. Und genau da liegt das Problem: Der Webserver kann den Server Key, wenn es mit einem Passwort geschützt ist, nicht einfach verwenden, sondern muss nachfragen, was einen unbeaufsichtigten Start unmöglich macht. (Wir entfernen die Verschlüsselung vom Key)


cp server.key server.key.org
openssl rsa -in server.key.org -out server.key

Schritt 4: Das Zertifikat generieren

Jetzt geht es endlich an das lang ersehnte Zertifikat. Als Gültigkeitsdauer sollte ein Jahr vorerst reichen. Danach lesen wir uns wieder ;)

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
Signature ok
subject=/C=AT/ST=Feldkirch/L=Nofels/O=STARGAZER systems/OU=IT Core services/CN=my.stargazer.at/Email=*****@******.***
Getting Private key

Schritt 5: Das Zertifikat einbauen

Wir haben nun die Dateien server.crt und server.key erhalten, welche wir nun sichern und schliesslich in den Webserver einbauen. Ich für meinen Teil verwende einen Apache Webserver. Die Konfiguration des SSL vHosts ist dabei relativ einfach. Der Vollständigkeit halber, liefere ich hier einmal den entsprechenden Ansatz:

SSLEngine on
SSLCertificateFile /etc/apache2/ssl/ssl.crt/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/ssl.key/server.key
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
CustomLog logs/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

Schritt 6: Den Webserver neu starten

Der letzte Schritt ist nun ein Neustart des Webservers und ein Test der Webseite, um zu sehen ob alles klappt.

Author:

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert