OpenSSL - TLS-/SSL-Zertifikate
OpenSSL - Zertifikate anzeigen/prüfen/testen
openssl x509 -noout -text -in <zertifikatsname.crt>
openssl x509 -noout -issuer -in <zertifikatsname.crt>
openssl x509 -noout -subject -in <zertifikatsname.crt>
openssl x509 -noout -dates -in <zertifikatsname.crt>
openssl x509 -noout -issuer -subject -dates -in <zertifikatsname.crt>
openssl x509 -noout -hash -in <zertifikatsname.crt>
openssl x509 -noout -fingerprint -in <zertifikatsname.crt>
openssl verify -verbose <zertifikatsname.crt>
echo QUIT | openssl s_client -connect localhost:636 -showcerts
echo QUIT | openssl s_client -connect www.magenbrot.net:443 | sed -ne '/BEGIN CERT/,/END CERT/p' > zertifikat.crt
echo QUIT | openssl s_client -connect www.magenbrot.net:443 | openssl x509 -noout -text
echo QUIT | openssl s_client -connect www.magenbrot.net:443 2>/dev/null | openssl x509 -noout -dates
echo QUIT | openssl s_client -tls1_2 -servername ovtec.it -connect ovtec.it:443 | openssl x509 -noout -text
# herunterladen und in Datei speichern:
echo QUIT | openssl s_client -starttls smtp -crlf -connect mailgw.ovtec.it:25 | sed -ne '/BEGIN CERT/,/END CERT/p' > zertifikat.crt
echo QUIT | openssl s_client -starttls pop3 -crlf -connect mail.ovtec.de:110 | sed -ne '/BEGIN CERT/,/END CERT/p' > zertifikat.crt
echo QUIT | openssl s_client -starttls imap -crlf -connect mail.ovtec.de:143 | sed -ne '/BEGIN CERT/,/END CERT/p' > zertifikat.crt
# in lesbar ausgeben:
echo QUIT | openssl s_client -starttls smtp -crlf -connect mailgw.ovtec.it:25 | openssl x509 -noout -text
echo QUIT | openssl s_client -starttls pop3 -crlf -connect mail.ovtec.de:110 | openssl x509 -noout -text
echo QUIT | openssl s_client -starttls imap -crlf -connect mail.ovtec.de:143 | openssl x509 -noout -text
CSR erzeugen/anzeigen (Certificate Signing Request)
Wenn Ihr ein offizielles Zertifikat bestellen wollt, müsst ihr für die Certificate Authority (CA) einen Zertifikatsantrag erstellen. Dieser wird auf der Webseite Eurer CA (z.B. Thawte, Geotrust, Startssl) hochgeladen und die CA erzeugt daraus dann das endgültige Zertifikat, das ihr dann zusammen mit den Zwischenzertifikaten (intermediate-certificate) herunterladen könnt.
Die aktuellen Browser verlangen die Angabe der DNS-Namen, die im Zertifikat enthalten sein sollen, in einer X509v3 Erweiterung zu OpenSSL als sogenannte „Subject Alternative Names“ (SAN). Der CommonName alleine reicht nicht mehr aus.
Umlaute im Städte- oder Firmennamen sind mit utf8 auch kein Problem mehr.
Ich habe eine Konfigurationsdatei erstellt, die ihr herunterladen und für eure Zwecke anpassen könnt. Das erstellen eines 4096-Bit Keys und passender CSR ist dann kein Problem mehr und mit einem Kommando erledigt:
# Konfigurationsdatei herunterladen und anpassen
wget -O request.cnf https://wiki.magenbrot.net/_media/linux/kryptographie/ssl/request.cnf
vi request.cnf # SAN anpassen!
# 4096-bit Key erstellen und das CSR mit den Angaben aus der Konfigurationsdatei generieren
openssl req -nodes -newkey rsa:4096 -keyout ovtec.it.key -new -out ovtec.it.csr -config request.cnf
# CSR anzeigen lassen (mit UTF8)
openssl req -noout -text -nameopt utf8 -in ovtec.it.csr
# 4096 Bit RSA-Key erzeugen
openssl genrsa -out <zertifikatsname.key> 4096
# den CSR dazu erzeugen
openssl req -new -sha256 -key <zertifikatsname.key> -out <zertifikatsname.csr>
#jetzt sind ein paar Fragen zu beantworten (gibt man nur einen . ein so bleibt das Feld leer):
Country Name (2 letter code) [AU]:DE
State or Province Name (full name) [Some-State]:Bayern
Locality Name (eg, city) []:Fuerth
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Deine Firma
Organizational Unit Name (eg, section) []:.
Common Name (eg, YOUR name) []:www.meinedomain.de
Email Address []:webmaster@meinedomain.de
Please enter the following 'extra' attributes to be sent with your certificate request
A challenge password []:
An optional company name []:
# (optional) den Key mit einer Passphrase versehen. Diese Passphrase wird dann z.B. beim Starten von Apache abgefragt. Also Achtung: Ein automatischer Start des Apachen ist dann nur noch mit weiteren Tricks möglich.
openssl rsa -des3 -in <zertifikatsname.key> -out <zertifikatsname.key.sec>
openssl req -noout -text -in <request.csr>
Passphrase entfernen/ändern
# Passphrase entfernen
openssl rsa -in <zertifikatsname.key> -out <neueskeyfile.key>
openssl rsa -des3 -in <zertifikatsname.key> -out <neueskeyfile.key>
- Passphrase für ein Keyfile entfernen/ändern (ECC Keys)
# Passphrase entfernen
openssl pkey -in <zertifikatsname.key> -out <neueskeyfile.key>
# Passphrase ändern
openssl pkey -des3 -in <zertifikatsname.key> -out <neueskeyfile.key>
Selbstsignierte (selfsigned) Zertifikate erstellen
Diese Zertifikate können für interne Zwecke eingesetzt werden oder für den Zeitraum bis man von der Trusted CA sein richtiges Zertifikat bekommt. Mit wenigen Schritten ist ein solches Zertifikat erstellt, diese Beispiel erzeugt ein für 60 Tage gültiges Zertifikat:
openssl genrsa -out <zertifikatsname.key> 4096
[...]
openssl req -new -sha256 -key <zertifikatsname.key> -out <zertifikatsname.csr> #(siehe oben)
[...]
openssl x509 -req -sha256 -days 60 -in <zertifikatsname.csr> -signkey <zertifikatsname.key> -out <zertifikatsname.crt>
[...]
oder als komfortabler Einzeiler:
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -sha256 -nodes -subj "/C=DE/ST=Bayern/L=Nuernberg/O=Firma/CN=app.mytest.de"
Zertifikate konvertieren
openssl x509 -outform der -in certificate.pem -out certificate.der
openssl crl2pkcs7 -nocrl -certfile certificate.cer -out certificate.p7b -certfile CACert.cer
openssl pkcs12 -export -out certificate.p12 -inkey userkey.pem -in usercert.pem
openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt
openssl x509 -inform der -in certificate.cer -out certificate.pem
openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
openssl pkcs12 -export -in certificate.cer -inkey privateKey.key -out certificate.pfx -certfile CACert.cer
# es wird nach dem Import-Passwort gefragt, wenn eines gesetzt wurde:
openssl pkcs12 -in certificate.pfx -out certificate.pem -nodes
# beim Fehler "Mac verify error: invalid password?" bitte mit der nächsten Methode probieren
openssl pkcs12 -in certificate.pfx -out certificate.pem -nodes -password pass:<PASSWORT>