Self Signed (Selbst signiertes) Zertifikat erstellen

Privaten Schlüssel generieren:

Zuerst brauchen wir einen privaten Schlüssel, den generieren wir mit openssl:

openssl genrsa -des3 -out server.key 1024

Hier steht die 1024 für die stärke (Bitanzahl) des Schlüssels, je größer der Wert, desto sicherer. Allerdings auf je größer der Wert, desto mehr rechenaufwand ist nötig. Gute werte sind zwischen 1024 und 4096 bit.

Wir erhalten folgende Ausgabe:

openssl genrsa -des3 -out server.key 1024
Generating RSA private key, 1024 bit long modulus
……………………………………………………++++++
…….++++++
e is 65537 (0x10001)
Enter pass phrase for server.key:
Verifying – Enter pass phrase for server.key:

Die Passphrase die Ihr hier eingebt müsst Ihr euch merken, da wir diese benötigen um die Passphrase hinterher zu entfernen und das Zertifikat zu erstellen. Wollt Ihr das Zertifikat nicht für einen Webserver verwenden oder Ihr habt wirklich starke Sicherheitsansprüche, kann es sinnvoll sein, das Passwort zu belassen. Ihr müsst die Passphrase dann allerdings bei jedem Start des Apaches eingeben.

CSR (Certificate Signing Request) generieren

Jetzt müssen wir den CSR generieren. Auch hier benötigen wir wieder openssl.

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

Wenn wir den Befehl abgesetzt haben erhalten wir folgende Ausgabe:

Enter pass phrase for server.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‚.‘, the field will be left blank.
—–
Country Name (2 letter code) [GB]:DE
State or Province Name (full name) [Berkshire]:Bavaria
Locality Name (eg, city) [Newbury]:Nuernberg
Organization Name (eg, company) [My Company Ltd]:Meine Firma
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server’s hostname) []:tn.genano.de
Email Address []:nicht.an.schreiben@genano.de

Please enter the following ‚extra‘ attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Hier tragen wir die Daten ein und kommen schon zum nächsten Schritt, dem entfernen der Passphrase.

Passphrase vom Schlüssel entfernen

Um nicht jedes mal ein Passwort eingeben zu müssen wenn wir den Apache starten, entfernen wir die Passphrase vom Schlüssel. Ich möchte allerdings darauf hinweisen, das dieses Vorgehen, sicherheitstechnisch nicht korrekt ist! Aber für die meisten Zwecke ausreicht.

cp server.key server.key.org

Wir kopieren als erstes mal den Schlüssel und anschließend entfernen wir die Passphrase

openssl rsa -in server.key.org -out server.key
Enter pass phrase for server.key.org:
writing RSA key

Dieses eine mal müssen wir das PW noch eingeben, dann aber haben wir mit dem server.key einen passwortloen Schlüssel für unseren Webserver. Jetzt brauchen wir nur noch das Zertifikat.

Zertifikat erstellen

Um ein Zertifikat mit einer Gültigkeit von 365 Tagen zu erstellen machen wir jetzt folgendes:

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

Wir erhalten folgende Ausgabe:

Signature ok
subject=/C=DE/ST=Bavaria/L=Nuernberg/O=Meine Firma/OU=IT/CN=tn.genano.de/emailAddress=nicht.an.schreiben@genano.de
Getting Private key

Und tada nun haben wir alles zusammen was wir brauchen.

Im Apache

Jetzt müssen wir den Kram noch in den Apachen eintragen, hier ein mini Beispiel:

Listen 443

<VirtualHost *:443>
DocumentRoot „/var/www/html/“
ServerName tn.genano.de
ServerAdmin webmaster@genano.de
ErrorLog /var/log/httpd/error_log
TransferLog /var/log/httpd/access_log

SSLEngine on

SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /etc/ssl/ServerCerts/server.crt
SSLCertificateKeyFile /etc/ssl/ServerCerts/server.key
<Files ~ „\.(cgi|shtml|phtml|php3?)$“>
SSLOptions +StdEnvVars
</Files>
<Directory „/srv/www/cgi-bin“>
SSLOptions +StdEnvVars
</Directory>
<Directory „/var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
SetEnvIf User-Agent „.*MSIE.*“ \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
CustomLog /var/log/httpd/ssl_request_log   ssl_combined
</VirtualHost>