Mit einer eigenen CA kann man sich leicht selber SSL Zertifikate ausstellen.
Continue reading Eigene Certificate Authority (CA) mit OpenSSL erstellenSchlagwort: SSL
Letsencrypt
Seit letsencrypt gegründet wurde, ist es jedermann möglich kostenlose SSL Zertifikate mit unterschiedlichen Methoden zu erstellen.
Die gängigsten werden hier vorgestellt.
Continue reading LetsencryptAlle Domains aller Zertifikate aller virtual hosts auflisten
Bei vielen konfigurierten virtual hosts (vhosts) kann man irgendwann die Übersicht verlieren vie viele Zertifikate und – im Fall von SAN Zertifikaten – wie viele Domains dort konfiguriert sind.
Das folgende Script erledigt diese Aufgabe für nginx, kann jedoch auch einfach für apache umgeschrieben werden.
PHP: Keine SSL-Verbindungen mehr ab 5.6
Nach einem Upgrade auf PHP 5.6 funktionieren auf einmal diverse Web-Applikationen, hauptsächlich Webmail Clients wie roundcubemail nicht mehr. Eine Fehlermeldung im PHP log gibt es nicht, ebenso wenig wie im Rückgabecode des Funktionsaufrufs. Das aufbauen der Verbindung schlägt einfach fehl.
Continue reading PHP: Keine SSL-Verbindungen mehr ab 5.6
postfix/dovecot: SSL intermediate/certificate chain
Bei vielen SSL Zertifikats-Anbietern, wie z.B: StartSSL muss man noch die intermediate Zertifikate, bzw. die certificate chain angeben, damit das Zertifikat als gültig anerkannt wird.
Dies ist vor allem wichtig, da ab PHP 5.6 sämtliche SSL-Verbindungen ohne gültiges Zertifikat abgelehnt werden.
Continue reading postfix/dovecot: SSL intermediate/certificate chain
Gebräuchliche OpenSSL Befehle
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