Benutzer-Werkzeuge

Webseiten-Werkzeuge


de:sysadmin:tools:ssl-cert-basteln

SSL Cert Bastel-Arbeiten

Am praktischsten ist ja meistens, wenn man irgendwo einen Cert-Bot laufen lässt, der die ganze Zertifikat-Neuausstellung automatisch und regelmäßig selber macht. Außerdem bekommt man da seine Zertifikate und alles was dazu gehört, in praktischem Format und die Dateien haben logische Namen.

Manchmal kommt man aber nicht drum rum - ein "richtiges" Zertifikat soll gekauft werden, man muss also einen Zertifikat-Request + Key bauen, beantragt dass bei einer Firma die je nach Typ teuer Geld dafür verlangt und dann bekommt man eine ZIP-Datei mit sonderbar benannten Dateien in unpraktischen Packmaß zurück und darf erst mal herausfinden was da für was ist und wie man das als PEM für Webserver oder sonstiges Gerät zusammenbastelt.

Das Tool der Wahl ist fast immer openssl, leider ist da die Bedienung auch für Kommandozeilenfreunde nicht immer so eingängig.

Hier eine (kleine, keineswegs vollständige) Sammlung von openssl-Befehlen …

Generiere ein Zertifikatsrequest

CSR=Zertifikatsrequest, also eine Datei die wir dem Dienstleister vorlegen damit der uns ein Zertifikat zurückgibt.

Man kann sich die ganzen Infos, für wen das Zertifikat ist usw. auch interaktiv abfragen lassen, aber alles in einer Zeile finde ich netter:

Hier wollen wir ein Zertifikat für alle direkten Subdomains von example.com beantragen (*.example.com, gilt also z.B. für www.example.com und mail.example.com 1)). Wir machen das für die "Example GmbH" im Ort München (L=Munich), Bundesstaat Bayern ST=BY, Deutschland (C=DE).

$ openssl req -nodes -newkey rsa:2048 \
  -keyout star.example.com.key -out star.example.com.csr \
  -subj "/C=DE/ST=BY/L=Munich/O=Example GmbH/CN=*.example.com"
Generating a RSA private key
..............+++++
..................+++++
writing new private key to 'star.example.com.key'

Die Datei star.example.com.csr reicht man dann bei seinem SSL-Zertifizierungs-Dienstleister ein (dort die Anleitung lesen).

Wenn man wie hier ein ganzes Domain-Zertifikat beantragt, muss man normalerweise nachweisen, dass man da auch Verfügungsrechte hat (z.B. in dem man einen TXT-Eintrag im DNS setzt. Was genau verlangt wird - Doku des Anbieters lesen)

Dateien identifizieren

Juhu, Zertifikat wurde ausgestellt. Ich bekomme ein ZIP und entpacke es in einem frischem leeren Verzeichnis. Häufig sind die Dateien nachvollziehbar benannt, manchmal bekommt man aber auch so was (Datei- und Firmannamen nur leicht verfremdet):

$ unzip _example_com.zip 
Archive:  _example_com.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
     1517  2004-01-01 00:00   bbbCertificateServices.crt
     1968  2019-03-12 00:00   ZEMANEKnetRSAbbbCA.crt
     2167  2018-11-02 00:00   VaranRSADomainValidationSecureServerCA.crt
     2187  2021-11-21 00:00   STAR_example_com.crt
---------                     -------
     7839                     4 files
     

Am Datum sieht man, dass STAR_example_com.crt wohl das neu ausgestellte Zertifikat sein sollte.

Wie die anderen CRT zusammenhängen? Detektivarbeit 🕵️‍♀️

for f in *crt; do echo "===== $f ======"; openssl x509 -noout -issuer -in $f ; done
===== bbbCertificateServices.crt ======
issuer=C = DK, ST = Funen, L = Kerteminde, O = Varan CA A.m.B.A, CN = bbb Certificate Services
===== STAR_example_com.crt ======
issuer=C = DK, ST = Funen, L = Kerteminde, O = Skildpadder AMBA, CN = Skildpadder RSA Domain Validation Secure Server CA
===== SkilpadderRSADomainValidationSecureServerCA.crt ======
issuer=C = AT, ST = Wien, L = Wien, O = ZEMANEK Netze, CN = ZEMANEKnet RSA Zertifikatsauthoritaet
===== ZEMANEKnetRSAbbbCA.crt ======
issuer=C = DK, ST = Funen, L = Kerteminde, O = Varan CA A.m.B.A, CN = bbb Certificate Services

Die Reihenfolge ist also STAR_example_com.crt > SkilpadderRSADomainValidationSecureServerCA.crt > ZEMANEKnetRSAbbbCA.crt > bbbCertificateServices.crt

Ein Zertifikate-Bundle bauen

$ cat star.example.com.pem intermediate.pem ca.pem > star.example.com.bundle.pem

Wichtig: Das eigentliche eigene Zertifikat muss ganz oben in der Datei landen!

Fingerprint von Zertifikate-Bundle und Key vergleichen

openssl x509 -noout -modulus -in star.example.com.pem
openssl rsa  -noout -modulus -in star.example.com.key

da sollte in unserem Fall 2x das selbe rauskommen

Hilfreiche Aliase

Weil die openssl-Kommandos (IMHO) alles andere als intuitiv sind, hab ich mir eine kleine Liste Aliase eingerichtet. Da ablegen, wo man sonst auch Aliase einträgt 2)

alias showcert='openssl x509 -text -noout -in '
alias showssl='nmap -p 443 --script ssl-cert '
alias sslcertchecksum='openssl x509 -noout -modulus -in '
alias sslissuer='openssl x509 -noout -issuer -in '
alias sslkeychecksum='openssl rsa -noout -modulus -in '
alias sslsubject='openssl x509 -noout -subject -in '
alias sslverify='openssl verify '
1)
*.example.com kann man NICHT für test.hosting.example.com verwenden, für test-hosting.example.com wäre es aber gültig
2)
Bei mir in $HOME/.alias
de/sysadmin/tools/ssl-cert-basteln.txt · Zuletzt geändert: 2022-11-09 02:07 von hella

Seiten-Werkzeuge

Mastodon Twitter