Ubuntu – SSL Zertifikat erstellen und installieren mit OpenSSL für Apache (Virtuelle Hosts) mit der Zertifizierungssstelle StartCom.org und SNI (Server Name Indication)

Kategorien

Ubuntu – SSL Zertifikat erstellen und installieren mit OpenSSL für Apache (Virtuelle Hosts) mit der Zertifizierungssstelle StartCom.org und SNI (Server Name Indication)

11. Juni 2012

Als erstes mittels OpenSSL einen Privaten Schlüssel und die Zertifikat Anforderung erstellen.
Erst erzeuge ich ein brauchbares Verzeichnis und wechsle dort hin (am einfachsten alles als Root).

mkdir /etc/apache2/ssl

cd /etc/apache2/ssl

openssl req -new -nodes -keyout server.key -out server.csr -newkey rsa:4096
oder besser mit SHA256 (auch SHA2 genannt).
Windows XP und Windows Server 2003 Clients könnten hier aber Probleme machen.
openssl req -new -nodes -sha256 -keyout server.key -out server.csr -newkey rsa:4096

Jetzt sollte man bei den nun folgenden Fragen vernünftige Angaben machen, wichtig hierbei ist der Common Name, dieser ist die entsprechende Web-Adresse (s.u.).

Generating a 4096 bit RSA private key
writing new private key to '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) [AU]:DE
State or Province Name (full name) [Some-State]:Hamburg
Locality Name (eg, city) []:Hamburg
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Private
Organizational Unit Name (eg, section) []:.
Common Name (eg, YOUR name) []:www.linux-survival-blog.de
Email Address []:postmaster@linux-survival-blog.de

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

Nun sollten die zwei Dateien server.csr (Zertifikat-Anforderung für die Zertifizierungsstelle) und server.key (Privater Schlüssel, diesen sollte kein anderer zu Gesicht bekommen) im aktuellen Verzeichnis befinden.

Jetzt geht es bei StartCom.org weiter, eine Zertifizierungsstelle die für einfache Zertifikate (Class 1, wie S/MIME (Mail), persönliche Authentifizierung, Web-Server) kostenlose Zertifikate erstellt, die auch mit aktuellen Webbrowsern keine Zertifizierungsfehler melden.

Also anmelden bei StartCom.org, ein persönliches Zertifikat erstellen und in den eigenen Webbrowser importieren. Im Anschluss damit bei StartCom.org einloggen eine Email Adresse und Webseite verifizieren über den Validations Wizard, und nun über den Certificates Wizard das Zertifikat anfordern.

Also Certificates Wizard -> Certificate Target soll Web Server SSL/TSL Certificate sein -> Continue -> Skip (da wir eine CSR-Datei haben) -> aud der jetzt folgenden Seite müssen wir die Daten der server.csr Datei eingeben (am besten über die Zwischenablage.

cat server.csr

—–BEGIN CERTIFICATE REQUEST—–
<TEXT>
—–END CERTIFICATE REQUEST—–
 

Diesen Teil (mit den Begin und End Markierungen) in auf der Web-Seite von StartCom.org eintragen und -> Continue -> Continue -> Domain wählen -> Continue -> Jetzt muss eine Sub-Domain angegeben werden www macht Sinn und dann -> Continue -> die Informationen noch mal durchlesen und -> Continue

Jetzt wird das erzeugte Zertifikat angezeigt, dieses am besten über die Zwischenablage kopieren. Im Verzeichnis /etc/apache2/ssl

nano server.crt

Jetzt den Text rein kopieren -> abspeichern (Strg + o). Und schon haben wir das Zertifikat in der Datei server.crt.

Jetzt noch das intermediate und root Zertifikat von StartCom.org laden.

wget https://www.startssl.com/certs/sub.class1.server.ca.pem
wget https://www.startssl.com/certs/ca.pem

Jetzt noch die Dateisystem Rechte setzen.

chown root:root /etc/apache2/ssl
chmod 0400 /etc/apache2/ssl

Die Zertifikat erzeugung ist damit abgeschlossen. Jetzt muß das ganze noch Apache beigebracht werden.

Im Verzeichnis /etc/apache2/sites-available muss für die entsprechende Seite eine SSL-Konfiguration erstellt werden. Am besten die vorhandene Konfiguration kopieren unter mit neuem Namen (<Sitename-ssl> oder ähnlich) speichern. Jetzt mal die Datei default-ssl im gleichen Verzeichnis anschauen und die <Sitename-ssl> entsprechend bearbeiten.

Der Anfang sollte so aussehen:

<IfModule mod_ssl.c>
<VirtualHost _default_:443>
 

jetzt folgen die Angaben aus der nicht-ssl-Konfigurations Datei

    ServerAdmin hijacker@abduct.de
    ServerName www.linux-survival-blog.de
    ServerAlias linux-survival-blog.de *.linux-survival-blog.de

    DocumentRoot …
.
.
.

und so weiter und vor </VirtualHost> fügen wir jetzt die Angaben für SSL hinzu.

SSLEngine on
SSLCertificateFile    /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key
SSLCertificateChainFile /etc/apache2/ssl/sub.class1.server.ca.pem
SSLCACertificateFile /etc/apache2/ssl/ca.pem

den Abschluss bildet

</VirtualHost>
</IfModule>

Abspeichen, Site aktivieren und Apache neu starten.

a2ensite <Sitename-ssl>
/etc/init.d/apache2 restart

Fertig.

Möchte man mit verschiedenen virtuellen Hosts und entsprechenden Zertifikaten arbeiten, muss noch die Datei /etc/apache2/ports.conf geändert werden um SNI (Server Name Indication) benutzen zu können.

NameVirtualHost *:80

Listen 80

<IfModule mod_ssl.c>
    # If you add NameVirtualHost *:443 here, you will also have to change
    # the VirtualHost statement in /etc/apache2/sites-available/default-ssl
    # to <VirtualHost *:443>
    # Server Name Indication for SSL named virtual hosts is currently not
    # supported by MSIE on Windows XP.
    NameVirtualHost *:443
    Listen 443
</IfModule>

<IfModule mod_gnutls.c>
    Listen 443
</IfModule>
 

Sprich die Zeile NameVirtualHost *:443 wurde eingefügt und schon kann man in den jeweiligen Konfiguartionsdateien der Sites auf verschiedene Zertifikate verweisen.