OpenSSL-Zertifikate
Geschrieben von: Michael Loth   
Montag, den 13. Februar 2012 um 00:00 Uhr


Anzeigen/Prüfen

  • Zertifikat komplett anzeigen
openssl x509 -noout -text -in <zertifikatsname.crt>
  • den Herausgeber des Zertifikats anzeigen
openssl x509 -noout -issuer -in <zertifikatsname.crt>
  • Für wen wurde das Zertifikat ausgestellt?
openssl x509 -noout -subject -in <zertifikatsname.crt>
  • Für welchen Zeitraum ist das Zertifikat gültig?
openssl x509 -noout -dates -in <zertifikatsname.crt>
  • das obige kombiniert anzeigen
openssl x509 -noout -issuer -subject -dates -in <zertifikatsname.crt>
  • den hash anzeigen
openssl x509 -noout -hash -in <zertifikatsname.crt>
  • den MD5-Fingerprint anzeigen
openssl x509 -noout -fingerprint -in <zertifikatsname.crt>
  • ein SSL-Zertifikat prüfen
openssl verify -CApath /etc/pki/tls/certs -verbose <zertifikatsname.crt>
  • einen SSL-Port auf Zertifikate abfragen
openssl s_client -CApath /etc/pki/tls/certs -connect localhost:636 -showcerts
  • ein HTTPS-Serverzertifikat runterladen
echo QUIT | openssl s_client -connect www.magenbrot.net:443 | sed -ne '/BEGIN CERT/,/END CERT/p'


Passphrase entfernen/ändern

  • Passphrase für ein Keyfile entfernen
openssl rsa -in <zertifikatsname.key> -out <neueskeyfile.key>
  • Passphrase für ein Keyfile ändern
openssl rsa -des3 -in <zertifikatsname.key> -out <neueskeyfile.key>


CSR
erzeugen/anzeigen

  • einen CSR + Keyfile erzeugen (für die Beantragung eines echten Zertifikats). Das <zertifikatsname.csr> sendet man danach an die zertifizierende Stelle, z.B. Thawte etc.
# 2048 Bit RSA-Key erzeugen
openssl genrsa -out <zertifikatsname.key> 2048

# den CSR dazu erzeugen openssl req -new -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]:meine Firma Organizational Unit Name (eg, section) []:.

Common Name (eg, YOUR name) []:www.meinedomain.de Email Address []: Diese E-Mail-Adresse ist gegen Spambots geschützt! JavaScript muss aktiviert werden, damit sie angezeigt werden kann.

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 openssl rsa -des3 -in <zertifikatsname.key> -out <zertifikatsname.key.sec>

  • einen CSR (Zertifikatsrequest) anzeigen
openssl req -noout -text -in <request.csr>


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> 2048
[...]
openssl req -new -key <zertifikatsname.key> -out <zertifikatsname.csr> #(siehe oben)
[...]
openssl x509 -req -days 60 -in <zertifikatsname.csr> -signkey <zertifikatsname.key> -out <zertifikatsname.crt>
[...]


Prüfen ob ein Zertifikat zu einem Key passt

Der private Teil eines Schlüssels enthält verschiedene Zahlen. Zwei dieser Zahlen bilden den „Publiy Key“ (diese Zahlen sind dann auch im Zertifikat erhalten), der Rest gehört zum „Private Key“. Um zu prüfen, ob der public key zum private key passt, können diese beiden Zahlen ausgelesen und verglichen werden.

$ openssl x509 -noout -modulus -in server.crt | openssl md5
$ openssl rsa -noout -modulus -in server.key | openssl md5

oder als einfach zu verwendendes Script:

#!/bin/sh
 
if [ "x$1" == "x" ]; then echo "Usage: $0 <filename without .key or .crt>"; exit 1; fi
 
(openssl x509 -noout -modulus -in $1.crt | openssl md5 ; openssl rsa -noout -modulus -in $1.key | openssl md5) | uniq
 
echo
echo "if there's more than one hash output, your key does not match the certificate"

Das funktioniert z.B. auch, um festzustellen, welches CSR zu einem Key gehört:

$ openssl req -noout -modulus -in server.csr | openssl md5


Zertifikate konvertieren

  • PEM nach DER
openssl x509 -outform der -in certificate.pem -out certificate.der
  • PEM nach P7B
openssl crl2pkcs7 -nocrl -certfile certificate.cer -out certificate.p7b -certfile CACert.cer
  • PEM nach PKCS12 (P12)
openssl pkcs12 -export -out certificate.p12 -inkey userkey.pem -in usercert.pem
  • PEM nach PFX
openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt
  • DER nach PEM
openssl x509 -inform der -in certificate.cer -out certificate.pem
  • P7B nach PEM
openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
  • P7B nach PFX
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
  • PFX nach PEM
openssl pkcs12 -in certificate.pfx -out certificate.cer -nodes