selbstsigniertes oder fremdsigniertes SSL-Zertifikat auf Webserver einrichten

(Last Updated On: 11. Juni 2015)

Wofür brauchen Sie SSL auf Ihrem Webserver?

SSL ermöglicht es Ihnen, die Verbindung zwischen Ihrem Webserver und den Besuchern des webservers verschlüsselt zu übertragen. So können fremde Leute wie der Internet Service Provider des Besuchers oder Leute, die mit ihm zusammen im WLAN sind, den Datenverkehr nicht im Klartext mitlesen. Das ist bei vertrauenswürdigen Seiten, wie etwa einem E-Mail-Service, einem vertrauenswürdigen Online-Forum für eine kleine private Community oder beispielsweise für einen Webchat sehr wichtig.

Damit SSL funktioniert, müssen Sie sich ein Zertifikat ausstellen. Das Zertifikat soll gegenüber dem Besucher der Website nachweisen, dass die Verbindung auch wirklich mit Ihrem Webserver, und nicht mti einem Fremden, der sich dazwischen geschaltet hat, stattfindet.

Was ist der Unterschied zwischen selbst- und fremdsigniertem SSL-Zertifikat?

Wie bereits gesagt funktioniert keine SSL-Verbindung ohne ein zugehöriges SSL-Zeritifkat. Das Zertifikat soll gegenüber dem Nutzer des Webservers nachweisen, dass er die Verbindung gerade mit dem webserver selbst hergestellt hat und keine Fake-Daten von jemandem bekommt, der sich als Ihr Webserver ausgibt. Diese sicherheit können Sie Ihren Besuchern eigentlich nur dann geben, wenn das Zertifikat von einer sogenannten Certificate Authority unterschrieben wurde, also nicht von Ihnen selbst. Denn nur diese Certificate Authority ist öffentlich anerkannt und unterschreibt SSL-Zeritfikate nur dann, wenn die Identität des Betreibers einer Website eindeutig nachgewiesen ist (etwa durch Einsenden ihres Personalausweises).

Das Problem dabei, wenn Sie ein SSL-Zeritfikat bei so einer CA unterschreiben lassen wollen: Sie müssen a) Ihre Identität preisgeben und b) kostet es jährlich eine Gebühr, das Zertifikat zu behalten. Manchmal wollen Sie zwra verschlüsselte Datenübertragung zwischen Webserver und Nutzer, dafür aber kein Geld und Ihre Privatsphäre aufgeben. In diesem Fall signieren Sie sich selbst Ihr Zertifikat. Wie bereits gesagt, können Sie dem nutzer dann keine Garantie mehr geben, dass er die Verbindung wirklich mit Ihnen aufbaut, da somit jederzeit ein Angreifer ebenfalls ein von ihm selbst signiertes Zertifikat einschmuggeln und damit Ihr eigentliches Zertifikat überschreiben kann, ohne dass jemand etwas merkt. Ihre Nutzer vertrauen ihnen bei einem selbstsignierten Zertifikat also blind, da ein selbstsingiertes Zertifikat keine Garantie für die Authentizität des Gesprächspartners liefert. Dafür haben Sie halt trotzdem den verschlüsselten Datenverkehr, der immerhin besser ist, als kein verschlüsselter Datenverkehr ;).

Selbstsigniertes SSL-Zertifikat erstellen

Ein selbstsigniertes SSL-Zertifikat erstellen Sie folgendermaßen

Als erstes müssten Sie OpenSSL auf dem Server installieren, sofern noch nicht vorhanden

aptitude install openssl
#oder
apt-get install openssl

Jetzt erstellen wir die benötigten Dateien über folgende Befehle

openssl req -new -key ssl.key -out ssl.csr
openssl req -days 36500 -x509 -key ssl.key -in ssl.csr > ssl.crt

die Datei ssl.key ist der private schlüssel, den der Server braucht, um verschlüsselte Nachrichten zu erstellen. Die ssl.csr ist für den Fall eines selbstsignierten SSL-Zertifikats nicht wichtig. Die .csr-Datei würden wir bei einemf remdsignierten SSL-Zertifikat an eine CA schicken, damit diese dann das Zertifikat erstellt und unterschreibt. Wir unterschreiben jedoch unser Zeritfikat selber und erstellen deswegen direkt aus der .csr-Datei die ssl.crt, das eigentliche, von uns selbst signierte Zertifikat.

Sie können bei einem selbstsignierten Zertifikat auch die Erstellung einer .csr-Datei überspringen und direkt zur Erstellung von privatem Schlüssel und Zeritfikat springen

openssl req -new -x509 -days 365 -nodes -sha256 -out ssl.key -keyout ssl.crt
#oder
openssl req -new -x509 -key /etc/ssl/private/ssl.key -days 1825 -sha256 -out /etc/ssl/certs/ssl.crt

Die Dateien ssl.key und ssl.crt müssen nicht immer die dateiendnung .key und .crt haben. Oft finden Sie auch für diese Dateien endungen wie beispielsweise ssl.cert.pem und ssl.key.pem, damit Sie sich mal nicht wundern, wenn Sie sowas sehen.

Jetzt haben sie die zwei wichtigen Dateien – den privaten Schlüssel und das Zertifikat. Wo hin damit? Linux/Unix-Systeme haben hier einen extra Ordner angelegt. Den privaten Schlüssel verschieben Sie nach /etc/ssl/private und das Zertifikat nach /etc/ssl/certs. Das haben wir oben bereits mti dem zweiten Befehl gezeigt.

Beim erstellen des Zertifikats werden Sie verschiedene Fragen gefragt. Die wichtigste ist immer die Frage nach dem Common Name / Server Name. Hier kommt der Full Qualified Domain name (also etwa www.<IhrName>.com rein, auf die das Zertifikat ausgestellt werden soll. Das www davor ist wichtig. Wenn Sie das zertifikat für einen webserver verwenden, der im lokalen Netzwerk steht und auch nur dort Webseiten ausliefern soll (also nicht nach draußen ins Internet), können Sie Hier einfach nur den Hostnamen des Servers eintragen.

von einer CA fremdsigniertes SSL-Zeritfikat erstellen

Ein fremdsigniertes SSL-Zertifikat erstellen Sie folgendermaßen

Als erstes müssten Sie OpenSSL auf dem Server installieren, sofern noch nicht vorhanden

aptitude install openssl
#oder
apt-get install openssl

Jetzt erstellen wir die benötigten Dateien über folgende Befehle

openssl req -new -newkey rsa:2048 -nodes -keyout <ihrname>.key -out <ihrname>.csr

die Datei ssl.key ist der private schlüssel, den der Server braucht, um verschlüsselte Nachrichten zu erstellen. Die ssl.csr ist der sogenannte Certificate Request. Die .csr-Datei müssen wir bei einem fremdsignierten SSL-Zertifikat an eine CA schicken, damit diese dann das Zertifikat erstellt und unterschreibt.

 

Die Dateien ssl.key und ssl.crt müssen nicht immer die dateiendnung .key und .crt haben. Oft finden Sie auch für diese Dateien endungen wie beispielsweise ssl.cert.pem und ssl.key.pem, damit Sie sich mal nicht wundern, wenn Sie sowas sehen.

Beim erstellen des privaten Schlüssels werden Sie einige Fragen gefragt. die wichtigste Frage ist die nach dem Common Name oder server Name. hier kommt der full Qualified Domain Name des Webservers rein,auf dem Sie das Zeritfikat nutzen wollen,a lso beispielsweise www.<IhrName>.com. Das www davor ist wichtig. Ausnahme: sie wollen sich ein sogenanntes WildCard-Zertifikat ausstellen lassen, welches Sie für sämtliche Hostnamen einer Domain verwenden können, also sowohl für www.<IhrName>.com als auch für forum.<IhrName>.com und mail.<IhrName>.com. Diese Wilrdcard-zeritfikat kosten etwas mehr als gewöhnliche FQDN-Zeritfikate. Wenn Sie ein WildCard-Zertifikat wollen, dann geben Sie *.<IhrName>.com auf die Frage nach dem Common Name ein.

Jetzt müssen Sie zu einer autorisierten CA Ihrer Wahl gehen (beispielsweise digicert.com), die das Zertifikat für Sie aus dem Certificate Request erstellt und unterschreibt. Auf der Website der CA ordern Sie zuerst das SSL-Zeritfikat, das Sie wollen (FQDN-Zertifikat oder Wildcard-Zertifikat) und werden irgendwann dazu aufgefrodert, den Inhalt Ihrer .csr-Datei in eine Textbox einzufügen.  Irgendwann bekommen Sie dann von der CA das Zertifikat in Form einer .crt oder .pem-Datei zugeschickt. Zusätzlich bekommen Sie das sogenannte Chain-File zugeschickt, das ist das Zertifikat der CA selbst, die das Zertifikat unterschrieben hat. Acuh dieses Zertifikat müssen Sie abspeichern und auf dem Webserver bereitstellen. Es bestätigt dem nutzer die Identität der CA, die das Zertifikat unterschrieben hat.

Jetzt haben sie die zwei wichtigen Dateien – den privaten Schlüssel (server.key) und das Zertifikat (server.crt bzw. server.pem). Wo hin damit? Linux/Unix-Systeme haben hier einen extra Ordner angelegt. Den privaten Schlüssel verschieben Sie nach /etc/ssl/private und das Zertifikat nach /etc/ssl/certs. Das haben wir oben bereits mti dem zweiten Befehl gezeigt.

Einrichten eines selbstsignierten Zertifikats auf dem Apache Webserver

Hier zeige ich Ihnen, wie Sie SSL für einen Webserver einrichten, auf dem nur eine einzige Domain läuft. Wenn Sie mehrere Domains auf Ihrem Apache-Webserver betreiben wollen (also etwa <IhrName>.com und <IhrName>.eu), dann führen Sie erst die schritte aus diesem Post aus und schauen Sie sich danach den Post über SNI SSL an.

Zunächst müssen wir sicherstellen, dass im Apache 2 das SSL-Modul aktiviert ist

sudo a2enmod ssl
sudo a2enmod headers
sudo service apache2 force-reload

Als erstes müssen wir inn der /etc/apache2/ports.conf festlegen, dass der Apache 2 bei aktivierem SSL-modul auf den port 443 (und andere gewüsnchte SSL-ports wie beispielsweise 8443) hören soll.

Listen 80
<IfModule ssl_module>
Listen 443 https
</IfModule>

<IfModule mod_ssl.c>
Listen 443 https
</IfModule>

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

dann müssen Sie die /etc/apache2/sites-available/default-ssl.conf (oder falls diese nicht vorhanden in einer neuen Datei namens ssl.conf) editieren

<IfModule mod_ssl.c>
<VirtualHost _default_:443>
DocumentRoot /var/www
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog &{APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLRequireSSL
SSLCertificateFile /pfad/zum/zertfiikat.pem
SSLCertificateKeyFile /Pfad/zum/Key.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE {17-9]" ssl-unclean-shutdown
</VirtualHost>
</IfModule>

Nach Abschluss der Konfiguration müssen wir noch folgende Befehle eingeben

sudo a2ensite default-ssl
sudo a2ensite (weitere namen von konfigurationsdateien unter /etc/apache2/sites-available)
sudo /etc/init.d/apache2 reload
sudo service apache2 restart

Zu guter letzt können Sie jetzt noch erzwingen, dass Nutzer zu Ihrem webserver immer SSL-verschlüsselte Verbindungen aufbauen. Wenn Sie auf dem Webserver desweiteren mehrere Domains bereitstellen wollen, also etwa <IhrName1>.com und <IhrName2>.eu, dann sollten Sie sich nachher noch den Post über SNI SSL anschauen.

Einrichten eines fremdsignierten Zertifikats auf dem Apache Webserver

Das funktioniert genau so wie oben, nur dass Sie zusätzlich in der /etc/apache2/sites-available/default-ssl.conf noch den Pfad zum ChainFile angeben müssen

 SSLCertificateChainFile /path/to/DigiCertCA.crt

 

 

Andreas Loibl ist SAP-Berater, Ethical Hacker und Online Marketing Manager und schreibt auf seinem Blog DaFRK Blog über verschiedene Themen in den Sektoren Projektmanagement, Informationstechnik, Persönlichkeitsentwicklung, Finanzen und Zeitmanagement.

DaFRK

Andreas Loibl ist SAP-Berater, Ethical Hacker und Online Marketing Manager und schreibt auf seinem Blog DaFRK Blog über verschiedene Themen in den Sektoren Projektmanagement, Informationstechnik, Persönlichkeitsentwicklung, Finanzen und Zeitmanagement.

Das könnte Dich auch interessieren...

1 Antwort

  1. 11. Juni 2015

    […] Sie diese Schritte nachvollziehen, sollten Sie meinen Einführungspost über die Einrichtung von SSL-Verschlüsselung […]

Kommentar verfassen

This site uses Akismet to reduce spam. Learn how your comment data is processed.