SSL Zertifikat mit OpenSSL erzeugen

Verschlüsselung ist in der heutigen Zeit sehr wichtig geworden. Je mehr Internet Traffic verschlüsselt wird, desto aufwendiger und komplizierter wird es, diesen zu überwachen. Beinahe allen selbst gehosteten Diensten (Seafile, OwnCloud, Tiny Tiny RSS, Jabber, OpenVPN…) liegt ein Linux als Betriebssystem zu Grunde. Jeder Dienst, der über das Internet angesprochen wird, sollte über TLS/SSL laufen. Wer sich kein eigenes SSL Zertifikat kaufen möchte, kann entweder zu kostenlosen Diensten wie StartSSL.com zurückgreifen oder sich ein eigenes Zertifikat erstellen.

Ein eigenes Zertifikat hat den Vorteil, dass es komplett unter eigener Kontrolle bleibt und Anforderungen erfüllen kann, die kostenpflichtige Zertifikate sehr teuer machen können. Der Nachteil eines selbst erstellten Zertifikats ist, dass das Root Zertifikat in keinem Browser bzw. Zertifikatsspeicher vorhanden ist. Beim Aufruf solcher Seiten erscheinen als erstes unschöne Zertifikatswarnungen. Zumindest so lange, bis das eigene Root Zertifikat importiert wurde. Im Thema Sicherheit stehen Self Signed Zertifikate jenen von großen Anbietern in nichts nach.

Unter Linux wird ein SSL Zertifikat mit folgendem Befehl erzeugt:

sudo openssl req -newkey rsa:4096 -sha512 -x509 -days 365 -nodes -out /etc/nginx/certs/server-example-com.pem -keyout /etc/nginx/certs/server-example-com.key

Mit dem openssl Befehl wird ein SSL Zertifikat vom Typ X.509 erstellt, welches 1 Jahr gültig ist, eine Schlüsselstärke von 4096 Bit hat und SHA512 als Hash Algorithmus verwendet. Der Pfad kann sich je nach eingesetztem Webserver bzw. Vorlieben ändern. Damit sollte nach heutigem Stand der Dinge ein extrem starkes Zertifikat vorhanden sein. Um das Zertifikat vor unberechtigten Zugriffen zu schützen, sind folgende Befehle auszuführen.

sudo chown -R www-data:www-data /etc/nginx/certs
sudo chmod 600 /etc/nginx/certs/server-example-com.pem
sudo chmod 600 /etc/nginx/certs/servdr-example-com.key

Wer sich zusätzlich gleich auf den Einsatz von „Perfect Forward Secrecy“ vorbereiten möchte, kann sich mit folgendem openssl Befehl einen Diffie-Hellman Key erzeugen.

openssl dhparam -out /etc/nginx/certs/dhparam.pem 2048

Wie PFS unter nginx verwendet werden kann, habe ich in diesem Blog Post beschrieben: Klick