Okt
24
2015

Apache 2.x Webserver mit SSL Zertifikat konfigurieren

Apache SSL © Maximilian Riess / Riess Group.

Dieser Artikel beschreibt die Konfiguration eines Apache Webservers mit SSL-Zertifikat.

Private Key

Der Private Key wird benötigt, um das Zertifikat zu generieren. Der Webserver benötigt den Private Key auch, um mit dem Zertifikat eine verschlüsselte Verbindung herzustellen. Ohne den Private Key ist das Zertifikat nicht verwendbar.

Der Private Key kann mit einem Passwort geschützt werden. Ist der Private Key mit einem Passwort geschützt, muss man z.b. beim Starten des Apache das Passwort angeben, ansonsten kann die SSL-Engine nicht starten.

Um einen Schlüssel mit 4096 Bit zu erstellen, den folgenden Befehl ausführen:

$ openssl genrsa -out server.key 4096 
Generating RSA private key, 4096 bit long modulus
........................................................+++
..+++
e is 65537 (0x10001)
$
Alternativ kann der Private Key auch mit Passwort erzeugt werden:
$ openssl genrsa -des3 -out server.key 4096
Generating RSA private key, 4096 bit long modulus
..............................................................................++++++
................................................++++++
e is 65537 (0x10001)
Enter pass phrase for server.key: ******
Verifying - Enter pass phrase for server.key: ******
$

 

Certificate Signing Request (CSR)

Der CSR enthält die Informationen, die in das Zertifikat übernommen werden sollen. Firma, Adresse, Domainname, Email-Adresse, etc. Mit dem CSR wird von der Zertifizierungsstelle ein Zertifikat erzeugt und signiert. Für Testzwecke kann man auch ein selbst signiertes Zertifikat erstellen.

Der Domainname für den das Zertifikat erzeugt wird, wird im Feld „Common Name (eg, YOUR name)“ eingetragen. Die weiteren Angaben sind optional, können also auch leer gelassen werden indem man nur einen Punkt („.“) eingibt, oder einfach Return drückt.

$ openssl req -new -key server.key -out server.csr -sha256
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) [AU]:DE
State or Province Name (full name) [Some-State]:BY
Locality Name (eg, city) []:Augsburg
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Maximilian Riess
Organizational Unit Name (eg, section) []:IT
Common Name (eg, YOUR name) []:www.riess-group.com
Email Address []:your@emailaddress.net

Please enter the following 'extra' attribute
to be sent with your certificate request
A challenge password []:.
An optional company name []:.

Daten aus dem CSR anzeigen

Um die Daten aus dem CSR File anzuzeigen, kann die folgende Befehlszeile verwendet werden. Man kann das CSR auch über Onlinedienste überprüfen. Eine Möglichkeit hierzu ist https://secure.comodo.net/utilities/decodeCSR.html.

$ openssl req -noout -text -in server.csr
Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: C=DE, ST=BY, L=Augsburg, O=Maximilian Riess, CN=www.riess-group.com/emailAddress=your@emailaddress.net
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (4096 bit)
                Modulus:
                    19:a4:c9:cd:d3:a1:5d:cc:a1:55:22:1d:aa:00:ef:
                    ...
                Exponent: 65537 (0x10001)
        Attributes:
            a0:00
    Signature Algorithm: sha256WithRSAEncryption
         ad:da:d0:e0:28:22:a3:0f:ff:d3:66:67:90:a2:11:e1:cc:3d:
         ...

Selbst signierte Zertifikate

Wenn es für manche Anwendungsfälle nicht stört, dass der Browser eine Fehlermeldung ausgibt, kann man ein Zertifikat auch selber generieren. Dabei wird der Aussteller des Zertifikats zwar als nicht vertrauenswürdig angesehen, die Verschlüsselung der Verbindung funktioniert aber trotzdem. https://www.sslshopper.com/assets/images/for_different_site.gif

 

Ein self-signed certificate mit einer Gültigkeit von 10 Jahren (3650 Tage) erstellen:

$ openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt
Signature ok
subject=/C=DE/ST=BYW/L=Augsburg/O=Maximilian Riess/CN=www.riess-group.com/emailAddress=your@emailaddress.net
Getting Private key

 

Offizielle SSL-Zertifikate (CRT)

Mit dem CSR kann man bei einschlägigen Zertifizierungsstellen ein Zertifikat bestellen. Wie die Bestellung durchgeführt wird, unterscheidet sich je nach Anbieter. Das Zertifikat erhält man üblicherweise als Download.

PSW Group – https://www.psw.net/ssl-zertifikate.cfm

 

Verisign – http://www.verisign.com

 

RapidSSL – https://www.sslpoint.com/de/ssl-zertifikate/geotrust/

 

Trustico – http://www.trustico.de

 

 

Kostenlose SSL-Zertifikate

 

https://www.startssl.com

 

https://cacert.org

 

https://letsencrypt.org/

 

Installation des SSL-Zertifikats

Das SSL-Zertifikat wird installiert, indem auf dem Webserver der Private Key, das Zertifikat und das Intermediate Zertifikat installiert wird. Das Intermediate Zertifikat ermöglicht dem Browser das Zertifikat zu verifizieren. Man sollte die Installation mit mehreren Browsern oder entsprechenden Onlinediensten überprüfen, da nicht alle Browser die gleichen Voraussetzungen zur Verifizierung der Zertifikate mitbringen. Apache2-Konfiguration:

<IfModule mod_ssl.c>
<VirtualHost *:443>
 SSLEngine on
 SSLHonorCipherOrder On
 SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!RC4
 SSLCertificateFile "/etc/apache2/ssl/www_riess-group_com.crt"
 SSLCertificateKeyFile "/etc/apache2/ssl/www_riess-group_com.key"
 SSLCertificateChainFile "/etc/apache2/ssl/www_riess-group_com.cabundle"
 SSLCACertificatePath "/etc/ssl/certs"
... rest wie normale Virtual-Hosts konfiguration.
</VirtualHost>
</IfModule>

 

 

SSL Website prüfen

https://www.ssllabs.com/ssltest/index.html