Ich stand letztens vor dem Problem, eine TLS-verschlüsselte Verbindung zwischen meinem Server und Endgerät XY herstellen zu müssen.

Verschlüsselung ist schön und gut, aber leider meiner Ansicht nach für Laien und Semi-Laien wie mich viel zu schwer auf die Reihe zu bekommen. Noch dazu, wenn man auf einmal ein ominöses Zertifikat benötigt.
Lesen kann man über das Thema im Internet recht viel, aber wie man es auf den aktuellen Bedarfs-Fall anwendet ist nie so wirklich klar, da sowohl die Anforderungen wie auch die Wege an's Ziel verschieden sind und noch dazu gefundene Informationen meist überholt sind oder anderes Vorwissen voraussetzen.

Im Folgenden will ich zeigen, wie ich mit Hilfe der Organisation CAcert ein Zertifikat für meinen Server erstellt habe. Einmal auf die Schnelle Art über das Schlüsselbund-Dienstprogramm und einmal per Kommandozeile, um noch zusätzlich einen Schlüssel generiert zu haben, den mir das Schlüsselbund-Dienstprogramm (zumindest auf den ersten Blick) nicht hergab.

CAcert.org

CAcert.org ist eine nichtkommerzielle Zertifizierungsstelle, die von einem gemeinnützigen Verein betrieben wird und kostenfrei X.509-Zertifikate ausstellt. Dies soll eine Alternative zu den kommerziellen Zertifizierungsstellen sein, die zum Teil recht hohe Gebühren für ihre Zertifikate erheben, und somit das Erstellen von Zertifikaten (und das Nutzen verschlüsselter Verbindungen) für Jedermann etwas attraktiver machen.

Sowohl die Registrierung wie auch die Zertifikats-Ausstellung sind gratis, wobei man bei der Registrierung ein paar Daten über sich preis geben muss. Ein Zertifikat soll ja (datentechnisch) Vertrauen schaffen, also sollte man hier bei den Angeben nicht geizen.

Nach der Registrierung gilt es, sowohl seine E-Mail-Adresse, als auch seine Domain, auf die das Zertifikat ausgestellt wird, zu verifizieren. Dies geschieht über die Navigationspunkte E-Mail-Adressen > Hinzufügen und Domains > Hinzufügen rechts (die E-Mail-Adresse sollte selbstverständlich zur Domain passen!).
Nachdem man den per E-Mail zugesendeten Link zur Bestätigung, dass einem die Adresse auch tatsächlich gehört, bestätigt hat, sind E-Mail und Domain im Account hinzugefügt.

Ich ärgerte mich schon, nicht viel früher ein Zertifikat erstellt und zu Hause auf HTTPS umgestellt zu haben, wenn dieser Prozess so einfach ist; stand dann aber auf einmal vor dem Problem, dass ich zum Erstellen eines Zertifikats eine Zertifikatsanfrage benötigte. Und diese durfte nicht einfach "Ich hätte gerne ein Zertifikat...bitte!" lauten.

Nein, eine Zertifikatsanfrage muss man ersteinmal erstellen.
Dies geht sowohl über das Schlüsselbund-Dienstprogramm, wie auch über den Kommandozeilenbefehl

openssl
.

Zertifikatsanfrage (CSR) mit dem Schlüsselbund-Dienstprogramm erstellen

Im Programmmenü (da schaut man eigentlich nur relativ selten rein) Zertifikatsassistent > Zertifikat einer Zertifizierungsinstanz anfordern... auswählen. (Danke Google, dass Du mir geholfen hast, das zu finden!)
 
Nun die E-Mail-Adresse eintragen, die man auch bei CAcert angegeben hatte und auf der Festplatte speichern.

Volà – man hat nun ein .csr-Dokument.

 
Allerdings als Datei – CAcert.org will, wenn man ein neues Server-Zertifikat erstellt, die Zertifikatsanfrage in ein Textfeld eingetragen haben. Also csr-Datei in einem Texteditor öffnen und sich darüber freuen, dass es etwas wie "Kopieren und Einfügen" gibt.
 
Resultat ist ein Zertifikat, welches man wiederum aus dem Browser herauskopiert, in eine neue Plaintext-Datei einfügt und als .crt abspeichert: Das fertige Zertifikat.
 

Zertifikatsanfrage (CSR) per Terminal mit openssl erstellen

Aufwändiger, aber flexibler.

Zuerst erstellen wir ein Verzeichnis, in welchem wir unsere Arbeitsdateien und nachher den Schlüssel und das Zertifikat aufbewahren

sudo mkdir /etc/ssl/

Dann erstellen wir eine OpenSSL-Config-Datei.
Es geht auch ohne, aber dann werden beim Verwenden von openssl alle in der Config-Datei aufgeführten Informationen einzeln abgefragt. Etwas nervig, besonders wenn man zwischendrinnen oder am Ende bemerkt, dass sich irgendwo der Fehlerteufel eingeschlichen hat und man das Ganze ein weiteres Mal durchführen muss.

sudo pico /etc/ssl/openssl.conf

RANDFILE = $ENV::HOME/.rnd

[ req ]
default_bits = 2048
default_keyfile = keyfile.pem
distinguished_name = req_distinguished_name
attributes = req_attributes
prompt = no
output_password =

[ req_distinguished_name ]
C  = <Dein Land, z.B. DE>
ST = <Dein Bundesland, z.B. Grossherzogtum Baden>
L  = <Deine Stadt>
O  = <Deine Organisation>
OU = <Deine Organisation>
commonName   = <Deine bei CAcert eingerichtete DOMAIN.TLD, z.B. apfel-z.net>
emailAddress = <Deine bei CAcert eingerichtete E-Mail-Adresse>

[ req_attributes ]
challengePassword = <ein beliebiges Passwort>

Im obersten req -Bereich hatte ich nichts geändert,
in den unteren Bereichen bitte alles ausfüllen, was zwischen < ... > steht.

Am wichtigsten ist der commonName. Hier muss der qualifizierte (ohne Subdomain; z.B. apfel-z.net) Name des Servers stehen, wie er auch bei CAcert angegeben wurde.

Das als challengePassword angegebene Passwort brauchen wir später noch einige Male, daher sollte man es sich gut merken, ggf. in die Zwischenablage kopieren.
Da es auch der Schutz des Zertifikates ist, sollte das Passwort nicht zu kurz sein.

Weiter geht's:

sudo openssl genrsa -des3 -out /etc/ssl/server.key 2048

sudo openssl req -new -days 1825 -key /etc/ssl/server.key  -out /etc/ssl/server.csr  -config /etc/ssl/openssl.conf

sudo openssl rsa -in /etc/ssl/server.key –out /etc/ssl/private.key.decrypted

Hier wird jeweils das challengePassword abgefragt.

Ab hier geht das Spiel weiter, wie bei der obigen Schlüsselbund-Dienstprogramm-Lösung: Zertifikatsanfrage aus der eben erstellten .csr-Datei herauskopieren, bei CAcert.org ein neues Server-Zertifikat anfordern und die Zertifikatsanfrage in das Textfeld einfügen, das darauf erstellte Zertifikat in einer neuen Textdatei als .crt abspeichern. Fertig.

Zertifikat erneuern

Leider laufen Zertifikate aus und müssen regelmäßig erneuert werden.

Dies ist nun kein ganz so großer Akt mehr: Bei CAcert.org einloggen, Server-Zertifikate anzeigen in der Navigation rechts auswählen, das gewünschte Zertifikat auswählen und auf den Button "Erneuern" klicken.

 
Daraufhin wird wieder ein Zertifikat auf der Seite angezeigt. Text kopieren, .crt-Datei auf dem Server öffnen, welches das alte Zertifikat enthält und Text drüberkopieren.