Virtuelle Apache Hosts mit TLS/SSL Zertifikaten von StartSSL absichern

SSL Report: serverblogger.ch

SSL Report: serverblogger.ch

Verschlüsselung sollte einfacher nutzbar sein und Kommunikation grundsätzlich abgesichert werden um so die Massenüberwachung zu verhindern oder zumindest zu erschweren.

Nachdem ich in der letzten Woche das Thema TLS/SSL etwas ausführlicher beleuchtet habe, will ich in dieser Woche nun meine Beispielwebsites mit einem TLS Zertifikat versehen.

In meinem LAMP Stack auf dem Beispiel Root-Server läuft Ubuntu und der Apache 2 Webserver mit mehreren virtuellen Hosts.

Ein Root-Server hat „normalerweise“ (was ist schon normal in diesem Bereich 😉 ) eine IP-Adresse und einen Standard Host mit einem Domainnamen. Dieser Standard Host läuft auf Port 80. Die Apache Standard Konfiguration enthält auch einen TLS gesicherten Host, der läuft auf Port 443. In der Ubuntu Distribution ist der TLS/SSL Host vorkonfiguriert und kann mit den Befehlen.

sudo a2enmod ssl
sudo a2ensite default-ssl
sudo service apache2 reload

eingeschaltet werden. Ich hatte das im OwnCloud Artikel so gemacht und konnte daraufhin serverblogger.ch über http:// und https:// aufrufen. Der Haken bei der Sache ist, dass Ubuntu in diesem Zusammenhang in der Standardeinstellung ein selbst erstelltes Zertifikat nutzt. Dass hatte zur Folge, dass alle Browser darüber stolpern und ein PopUp Fenster mit einer Fehlermeldung anzeigen. Nach dieser Meldung werden vermutlich nicht viele Menschen die https:// Variante nicht besuchen. Wenn man die serverblogger.ch in einer Testsite wie https://www.ssllabs.com/ssltest/ aufruft, so sieht man das ganze Drama :).

In diesem Artikel will ich das Rating vom T auf ein A bringen.
In diesem Artikel will ich das Rating vom T auf ein A bringen.

Dazu erstelle ich ein kostenloses Zertifikat bei startssl.com und konfiguriere den Apache Webserver so, daß er mit mehrere Zertifikaten und mehreren virtuellen Servern mit unterschiedlichen Domainnamen zurechtkommt.

Ein kostenloses Webserver Zertifikat bei startssl.com erzeugen

Die Firma StartCom aus Israel bietet die Erstellung kostenloser Webserver-Zertifikate an und ist als Certified Authority (CA) in jedem Browser hinterlegt. Die Zertifikate sind also gültig und werden vom Browser akzeptiert. Die Schlüssel werden mittels Hardware generiert und sind laut FAQ sicher.

Achtung: StartSSL bietet an, Ihren privaten Schlüssel zur Erzeugung eines Zertifikats ebenfalls zu erstellen. Die von StartSSL erstellten privaten Schlüssel können natürlich von den üblichen Geheimdiensten mitgelesen/kopiert werden und StartSLL darf nichts sagen oder weiss es wirklich nicht. Wenn Sie Ihren privaten Schlüssel zur Erzeugung der Zertifikate selbst erzeugen UND mit einem Passwort versehen, sieht es mit der Sicherheit gar nicht so schlecht aus. Dieses grundsätzliche Problem hat man bei anderen CA’s ebenfalls.

Um Zertifikate erstellen zu können, muss man sich zunächst mit seinen persönlichen Daten registrieren.

Persönliche Daten
Persönliche Daten
Es wird eine E-Mail an die angegebene Adresse geschickt, die einen Überprüfungscode enthält.
Codeeingabe
Codeeingabe
Nachdem man den Code erfolgreich eingegeben hat, erzeugt der Browser einen privaten Schlüssel.

private key
private key
Mit diesem privaten Schlüssel wird ein Zertifikat erzeugt und in Ihrem Browser installiert. Dieses Zertifikat hat noch nichts mit den Webserver Zertifikaten zu tun. Sie authentifizieren sich damit in Zukunft gegenüber StartSSL. Ein Login mit Username und Passwort entfällt. Da dieser Schlüssel im lokalen Browser erzeugt wird, sollte es kein Problem darstellen. Ich bin da allerdings auch kein Spezialist und für Aufklärung dankbar.



Das Zertifikat wurde erzeugt und im Browser installiert. Sie können nun mit diesem Zertifikat Ihr StartSSL Konto verwalten! Sie sollten das Browserzertifikat sichern und an einem „sicheren Ort“ verwahren (z.B. USB Stick).

So sieht das bei mir im Firefox Browser aus …

StartSSL weiss nun, daß Sie es mit ein und derselben Person zu tun haben. Im nächsten Schritt muss ich die Domain, für die ich ein Webserver Zertifikat haben will, überprüfen lassen.

Domain überprüfen

Das Prinzip ist einfach. Klicken Sie auf Validation Wizard, fügen Sie Ihren Domainnamen ein, StartSSL schickt eine E-Mail an den administrativen Kontakt der Domain mit einem Code. Wenn Ihnen die Domain gehört, erhalten Sie den Code, geben ihn ein und haben dann 30 Tage das Recht Zertifikate zu erzeugen.


Die Domain ist nun überprüft und Sie können ein Webserver-Zertifikat erzeugen.

Webserver TLS/SSL Zertifikat erstellen

Als letzten Schritt erstellen Sie das eigentliche Zertifikat. Rufen Sie den Certificates Wizard auf und wählen zunächst den Typ des Zertifikats.


Beim nächsten Schritt ist es wichtig NICHT auf Continue, sondern auf Skip zu klicken und dann den privaten Schlüssel/Key selbst zu erzeugen. Der private Key wird auf Ihrem Root-Server gespeichert und der Apache Webserver liest ihn bei jedem Neustart ein und überprüft, ob die TLS Zertifikate zu diesem Key passen. Wenn Sie den Key mit einem Passwort versehen, was prinzipiell eine gute Idee ist, so müssen Sie das Passwort bei jedem Apache Neustart angeben. Alle mit diesem Key erzeugten Zertifikate sind nur gemeinsam mit Passwort gültig! Es gibt allerdings Möglichkeiten, diese Eingabe zu automatisieren.

Legen Sie sich auf dem Server mit dem folgenden Befehl einen privaten Schlüssel an:

openssl req -newkey rsa:4096 -sha256 -keyout private.key -out request.csr

Mit diesen Befehl wird ein 4096 bit langer RSA Schlüssel erzeugt. Der Algorithmus SHA-256 gilt momentan als sicher. Geben Sie ein Passwort ein (und vergessen Sie es nicht). Die dann folgenden Abfragen können mit der Enter Taste bestätigt werden, da die Daten von StartSLL ignoriert werden.

root@server1:/etc/ssl/myssl# openssl req -newkey rsa:4096 -sha256 -keyout private.key -out request.csr
Generating a 4096 bit RSA private key
....++
......................................++
writing new private key to 'private.key'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
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]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
root@server1:/etc/ssl/myssl#

Es entstehen zwei Dateien, eine heisst private.key und die andere request.csr. In der request.csr steht der Inhalt, den StartSSL für das Erstellen eines Zertifikats benötigt (csr = certified request).

Der Inhalt der request.csr Datei muss im nächsten Schritt in das Formularfeld kopiert werden.

StartSSL fragt die gewünschte Domain und eine Subdomain ab. Als Subdomainnamen gibt man normalerweise www ein.

Achtung: Das Zertifikat ist nur für diese eine Subdomain gültig. Weitere Subdomains sind nur kostenpflichtig möglich.

Nach der Domainauswahl erzeugt StartSSL nun das Zertifikat und zeigt es an.

Speichern Sie den Inhalt der Textbox in einer Datei (z.B. serverblogger.ch.crt) ab. Ausser diesem Zwischenzertifikat werden die intermediate und die root Zertifikate von StartCom benötigt. Auch diese Dateien im gleichen Verzeichnis speichern (der Übersicht halber). Sie finden die Dateien in der obigen Maske und in der Toolbox.

In Ihrem Verzeichnis befinden sich nun 5 Dateien

  • ca.pem
  • serverblogger.ch.crt
  • private.key
  • request.csr
  • sub.class1.server.ca.pem

Damit serverblogger.ch.crt gültig wird, muss noch der Inhalt des intermediate Zertifikats (sub.class1.server.ca.pem) in die Datei (serverblogger.ch.crt) kopiert werden.

—- BEGIN CERTIFICATE —-

… hier die Daten der serverblogger.ch.crt …

—- END CERTIFICATE —-

—- BEGIN CERTIFICATE —-

… hier die Daten der sub.class1.server.ca.pem …

—- END CERTIFICATE —-

Konfiguration des Apache Webservers

Dadurch, das ich namensbasierte virtuelle Hosts verwende (und normalerweise jeder dieser Hosts eine andere Domain hat), benötige ich für jeden virtuellen Host eine TLS/SSL Konfiguration.

Die Datei des virtuellen Servers muss entsprechend verändert werden.

<VirtualHost serverblogger.ch:80>
      ServerAdmin webmaster@serverblogger.ch
      ServerName serverblogger.ch
      ServerAlias www.serverblogger.ch
      DocumentRoot /var/www/serverblogger.ch/public_html/
      ErrorLog /var/www/serverblogger.ch/logs/error.log
      CustomLog /var/www/serverblogger.ch/logs/access.log combined
</VirtualHost>

<VirtualHost serverblogger.ch:443>
     DocumentRoot /var/www/serverblogger.ch/public_html/
     Servername serverblogger.ch
     SSLEngine On
     SSLCipherSuite AES128+EECDH:AES128+EDH
     SSLProtocol All -SSLv2 -SSLv3
     SSLHonorCipherOrder On
     SSLCertificateFile /etc/ssl/myssl/serverblogger.ch.crt
     SSLCertificateKeyFile /etc/ssl/myssl/private.key
     SSLCertificateChainFile /etc/ssl/myssl/sub.class1.server.ca.pem
     SSLCACertificateFile /etc/ssl/myssl/ca.pem
     Options -Indexes
</VirtualHost>

Wenn Sie nun den Apache neu starten, fragt er das Passwort ab

service apache2 restart
* Restarting web server apache2   Apache needs to decrypt your SSL Keys for serverblogger.ch:443 (RSA)
Please enter passphrase:

Nach Eingabe des richtigen Passwort sollte der Webserver starten und bei einer https:// Verbindung sollte im Browser folgendes zu sehen sein.

Erneuter Test

Ein erneuter Test bei ssllabs.com zeigt nun ein anderes Bild, der Server ist deutlich vertrauenswürdiger geworden.

SSL Report: serverblogger.ch

SSL Report: serverblogger.ch

Ein Konfigurationshilfe für andere Services finden Sie unter https://cipherli.st/

1. Hinweis: Die Einstellungen des SSL/TLS gesicherten Webservers sind jetzt so streng, daß sie beispielsweise dem Internet Explorer 8 verbieten auf die https:// Version der Site zuzugreifen. IE 8 betrifft etwa 1% aller Browser weltweit (oder knapp 10% aller Internet Explorer Versionen, deren gesamter Marktanteil bei etwa 8-10% liegt.

2. Hinweis: Wir bei NOVATREND verkaufen Ihnen ebenfalls Zertifikate von GeoTrust und von VeriSign/Symantec. Wir installieren Sie auch für Sie auf Ihrem Root-Server. Ich stelle das hier im Blog nochmal deutlich hervor, weil es für den professionellen Einsatz einfach eine praktische Dienstleistung ist.

3. Hinweis: Seit In ein paar Tagen ist wird unser Blog nur noch unter https://blog.novatrend.ch aufrufbar sein -> Update1 – Das Zertifikat fehlt noch.


tl;dr: Die Webserver Kommunikation auf einem Root-Server zu verschlüsseln ist gar nicht so schwer. Also los!

Autor: Hagen Graf

consultant, author, trainer, solution finder, web architect, developer, open source lover, visionary, orator, the good old webmaster. Able to simplify!

2 Gedanken zu „Virtuelle Apache Hosts mit TLS/SSL Zertifikaten von StartSSL absichern“

  1. Das Problem ist, dass ich jedesmal das Passwort eingeben muss wenn der Apache startet – d.h. ein reboot mit automatischem Start des Apache ist nicht drin – das ist blöd – gibts da eine Möglichkeit ohne dieses Passwort ?

Kommentar verfassen