*.example.com
kann man NICHT für test.hosting.example.com
verwenden, für test-hosting.example.com
wäre es aber gültigAm 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 …
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)
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
$ 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!
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
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 '
siehe auch:
gilt für alle Tipps, Tricks & Spickzettel:
dies sind einfache, teils banale Notizen für meinen persönlichen Gebrauch,
die hier eher zufällig auch öffentlich lesbar sind
(vielleicht hilft es ja jemandem weiter). Verwendung auf eigene Gefahr
Fehler-Hinweise, Dankesschreiben , etc. bitte an: web.21@unixwitch.de
weitere Tools / Spickzettel