Lets Encrypt Zertifikat mit eigenem private Key und CSR

So Leute hier mal wieder was aus der Kategorie: Aufschreiben damit ich es nicht vergesse.

Der Ausgangspunkt ist folgender. Seit Jahren sicher ich meinen Owncloud Server per SSL/TLS ab und damit es dabei nicht immer zu diesen dämlichen Zertifikatswarnungen kommt habe ich mir dafür jedes Jahr ein Zertifikat gekauft. Das kostete gut 8€ jedes mal, ziemlich viel wenn man denkt das das ganze vollautomatisch geht und die meisten CA’s wohl ziemlich nachsichtig sind wenn es um die Sicherheit geht. Genau aus diesem Grund nutze ich auf dem Server auch das sogenannte HTTP Public Key Pinning. Vereinfacht gesagt merkt sich der Browser des Nutzers so, für eine bestimmte Zeit, das meine Website ein ganz bestimmtes Zertifikat nutzt. Nicht irgendeines was von irgendeiner beliebigen CA ausgestellt wurde. So verhindert man z.B. das eine korrupte CA wie Wosign ein Zertifikat für die eigene Seite ausstellt und man es nicht merkt.

Erreicht wird das dadurch das man den Hash des Public Keys des gewünschten Zertifikates an den Client mitliefert. Aus diesem Grund werden auch immer zwei Hashes mitgeliefert. Einer für das aktuelle Zertifikat und einen Backup Hash, falls man ein neues Zertifikat installieren muss.

Genug der Theorie, bei mir war es nun soweit. Mein altes Zertifikat läuft aus und ich möchte auf Lets Encrypt umsteigen. Den Private Key und den CSR für mein Backup Zertifikat habe ich bereits letztes Jahr erstellt (und sicher aufbewahrt), als ich HPKP auf meinem Server eingerichtet habe. Jetzt muss ich aber einen Weg finden diese dem Lets Encrypt Client unterzuschieben. Denn normalerweise nutzt dieser bei jeder Erneuerung (Lets Encrypt Zertifikate sind nur 3 Monate gültig) einen neuen Private Key und CSR. Bis ich den passenden Aufruf gefunden hatte hat es jedoch ein wenig gedauert.

Was Ihr braucht:

  • Funktionsfähigen Lets Encrypt Client aka Certbot
  • Selbst erstellen Private Key & CSR (DER Format)
  • Lets Encrypt Config für die Domain die Ihr updaten wollt

Zuerst solltet Ihr für die Domain die Ihr updaten wollt eine Config Datei anlegen, das macht die CLI für Certbot ein bisschen kürzer.

# This is an example of the kind of things you can do in a configuration file.
# All flags used by the client can be configured here. Run Certbot with
# "--help" to learn more about the available options.

# Use a 4096 bit RSA key instead of 2048
rsa-key-size = 4096

# Uncomment and update to register with the specified e-mail address
email = foo@example.com

# Uncomment and update to generate certificates for the specified
# domains.
domains = example.com

# Uncomment to use a text interface instead of ncurses
text = True

# Uncomment to use the standalone authenticator on port 443
# authenticator = standalone
# standalone-supported-challenges = tls-sni-01

# Uncomment to use the webroot authenticator. Replace webroot-path with the
# path to the public_html / webroot folder being served by your web server.
authenticator = webroot
webroot-path = /usr/share/nginx/html

Passt hier einfach die Werte für email, domains und webroot-path an. Speichert die Datei dann unter /etc/letsencrypt/configs/yourserver.example.com.conf ab.

So jetzt kommt die eigentliche Magie, überlegt euch am besten schon vorher wo Ihr Private Key, CSR und die erzeugten Zertifikate speichern wollt.

root@example:~# /path/to/certbot-auto certonly --config /etc/letsencrypt/configs/yourserver.example.com.conf --key /path/to/yourserver.example.com.key --csr /path/to/csr/yourserver.example.com.csr.der --cert-path /path/to/yourserver.example.com.cert.pem --fullchain-path /path/to/yourserver.example.com.fullchain.pem

Hat alles geklappt dann solltet Ihr am gewünschten Speicherort eure Zertifikate wieder finden die Ihr in eurer Server Config eintragen könnt.

Viel Spass

Ein Gedanke zu „Lets Encrypt Zertifikat mit eigenem private Key und CSR“

  1. Hi Bjoern,
    vielen Dank für diesen Artikel, er hat mich veranlasst mir mal wieder Let’s Encrypt anzuschauen. Mittlerweile gibt es ja eine ganze Flut von Clients. Unter Windows habe ich gute Erfahrungen mit dem ACMESharp Client gemacht, der spielt gut mit der PowerShell und Exchange / IIS zusammen. Falls es jemanden interessiert:
    https://www.frankysweb.de/exchange-2016-kostenlose-zertifikate-von-lets-encrypt/

    Mach weiter so,
    Gruß aus NRW,
    Frank

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert