Inhalt
Allgmeine OpenSSL Befehle
Diese Kommandos dienen zum erstellen von CSRs, Zetifikaten, PrivateKeys und anderen verschiedenen Dingen.
PrivateKey erstellen
openssl genrsa -out example.com.key 4096
Zertifikat erstellen
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout privateKey.key -out certificate.crt
CSR erstellen
openssl req -out CSR.csr -key privateKey.key -new
Siehe dazu auch: SSL CSR erstellen für weitere Optionen, wie z.B: ein CSR für ein SAN Zertifikat.
CSR aus bestehendem Zertifikat erstellen
Hat man keinen CSR zum ursprünglich angelegten Zertifikat mehr, lässt sich das einfach aus dem bisherigen Zertifikat und Key erstellen:
openssl x509 -x509toreq -in certificate.crt -signkey privateKey.key -out $CSR.csr
Neuer PrivateKey aus altem erstellen
openssl rsa -in privateKey.pem -out newPrivateKey.pem
Neuer CSR inklusive key erstellen
openssl req -new -newkey rsa:4096 -nodes -keyout www.example.com.key -out www.example.com.csr -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com"
Neues selbst signiertes Zertifikat inklusive key erstellen
openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" -keyout www.example.com.key -out www.example.com.crt
Überprüfen mit OpenSSL
Zertifikate, CSRs oder PrivateKeys überpüfen:
Certificate Request (CSR) prüfen
openssl req -text -noout -verify -in CSR.csr
PrivateKey prüfen
openssl rsa -check -in privateKey.key
Zertifikat anschauen
openssl x509 -text -noout -in certificate.crt
Einzelne Felder aus dem Zertifikat ausgeben
openssl x509 -enddate -noout -in certificate.crt
openssl x509 -subject -noout -in certificate.crt
PKCs12 file prüfen
openssl pkcs12 -info -in keyStore.p12
Debuggen mit OpenSSL
Falls man einen Fehler bekommt wie: „private doesn’t match the certificate“ oder einem installierten Zertifikat wird nicht vertraut, dann kann man das mit diesem Kommandos herausfinden.
Prüfen ob ein Zetifikat (.crt) zu einem Schlüssel (.key) passt
openssl x509 -noout -modulus -in certificate.crt | openssl md5; openssl rsa -noout -modulus -in privateKey.key | openssl md5; openssl req -noout -modulus -in CSR.csr | openssl md5
(alle md5-summen müssen gleich sein)
Mit der Website verbinden und Zertifikat sehen
openssl s_client -connect www.paypal.com:443 Hinweis: Bei der Verwendung von name based virtualhosts mittels SNI muss zusätzlich noch der Parameter -servername angefügt werden: openssl s_client -servername www.paypal.com -connect www.paypal.com:443
Konvertieren mit OpenSSL
Mit den folgenden Kommandos kann man Zertifikate und Schlüssel in andere Format konvertieren um diese mit spezifischen Server- und Software- typen kompatibel zu machen.
z.B. eine normale PEM Datei, welche mit apache funktionieren würde in eine PFX (PKCS#12) Datei umwandeln und mit Tomcat oder IIS zu benutzen.
DER nach PEM
openssl x509 -inform der -in certificate.cer -out certificate.pem
PEM nach DER
openssl x509 -outform der -in certificate.pem -out certificate.der
PKCS12/PFX (.p12/.pfx) nach PEM
openssl pkcs12 -in keyStore.pfx -out keyStore.pem -nodes
(You can add -nocerts to only output the private key or add -nokeys to only output the certificates)
PEM nach PKCS12/PFX (.p12/.pfx)
openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt
Quelle: SSLShopper: The Most Common OpenSSL Commands
CA erstellen und mit dieser ein Zertifikat erstellen
Mit den nachfolgenden Befehlen kann man schnell eine CA erstellen udn damit ein Zertifikat signieren:
# Key erstellen
openssl genrsa -out ca.key 2048
# Root-CA Zertifikat mit diesem key erstellen
openssl req -x509 -new -nodes -key ca.key -sha256 -days 1024 -out ca.crt
## Zertifikat für domain: "example.org" erstellen
# Key für cert erstellen:
openssl genrsa -out example.org.key 2048
# CSR mit diesem key erstellen
openssl req -new -key example.org.key -out example.org.csr
# Zertifikat erstellen und mit der Root-CA signieren:
openssl x509 -req -in example.org.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out example.org.crt -days 500 -sha256
Nützliche aliase für bash
Wenn man in bash aliase anlegt kannt man die, doch recht schwierig zu merkenden Kommandos abkürzen:
alias csrview='openssl req -text -noout -verify -in'
alias crtview='openssl x509 -text -noout -in'
alias sslkeygen='openssl genrsa 4096 -out'
Nützliche Shell Scripts
Diese Scripts kann man im ~/bin/ Verzeichnis ablegen zum einfachen aufrufen.
checkcert
Zeigt die Checksummen von KEY, CRT und CSR an, damit man sofort sieht ob diese zusammenpassen.
#!/bin/bash
DOMAIN=$1
if [ -z "$DOMAIN" ]; then
echo "usage: $0 <domain.tld>"
exit 1
fi
if [ "$DOMAIN" != "" ]; then
if [ -f $DOMAIN.crt ]; then
echo -n "CRT: "; openssl x509 -noout -modulus -in $DOMAIN.crt | openssl md5
fi
if [ -f $DOMAIN.key ]; then
echo -n "KEY: "; openssl rsa -noout -modulus -in $DOMAIN.key | openssl md5
fi
if [ -f $DOMAIN.csr ]; then
echo -n "CSR: "; openssl req -noout -modulus -in $DOMAIN.csr | openssl md5
fi
fi