Selbstsignierte Zertifikate mit Subject Alternative Names (SANs) für Apache, Nginx oder Tomcat erstellen
Posted by Guenny onUm Zertifikate und deren Erstellung oder Einbindung gab es auf ITrig schon öfters Beiträge (siehe SHA-256, Tomcat, Nginx oder Apache). Heute soll es um die Einbindung von so genannten Alternativen Namen in das Zertifikat gehen.
Das heißt ein so erstelltes Zertifikat ist für mehr als eine Adresse, Subdomain oder IP gültig (Wildcard) gültig.
So eine Vorgehensweise bietet sich an, da mit einem Zertifikat mehrere Subdomainadressen erschlagen werden können.
Beispiel
Hauptdomain donald.entenhausen.stadt
Subdomain1 tick.entenhausen.stadt
Subdomain1 trick.entenhausen.stadt
Subdomain1 track.entenhausen.stadt
Gleiches lässt sich alternativ für IP Adressen eintragen
IP1 313.entenhausen.stadt
Alle oben erwähnten Einträge, egal ob IP oder DNS werden mit einem Zertifikat, welches auf "donald.entenhausen.stadt" ausgestellt wurde, als gültig angesehen.
Folgende Einträge werden bei Subject Alternative Names unterstützt E-Mail, URI, DNS, RID, IP, dirName und otherName
Erstellung von SANs Einträgen in SSL Zertifikaten für Apache oder Nginx
Prinzipiell muss bei der Verwendung von OpenSSL und SANs eine Konfigurationsdatei angelegt oder die vorhandene angepasst werden.
Ist ersteres der Fall, muss diese beim Ausführen per Befehl mitgegeben werden.
Bei der zweiten Option, welche hier Verwendung findet, wird die OpenSSL Config Datei direkt bearbeitet.
Hier sollte darauf geachtet werden, vorher eine Sicherung zu erstellen und die Änderungen nach dem Erstellen wieder in den Originalzustand zurückzuführen, da sie sonst bei Folgeaktionen weiterhin greifen.
Folgende Werte (fett markiert) müssen in einer Konfigurationsdatei oder direkt in der OpenSSL Config gesetzt werden.
cp /etc/ssl/openssl.cnf /home/user/openssl.cnf.orig
sudo nano /etc/ssl/openssl.cnf
# Festlegen der gewünschten Zusatzeintraege, egal ob IP, DNS oder Mail, die Eintraege muessen nummeriert werden
[ alternate_names ]
DNS.1 = tick.entenhausen.stadt
DNS.2 = trick.entenhausen.stadt
DNS.3 = track.entenhausen.stadt
IP1 = 313.313.313.313
# Damit bei der Zertifikats Anfrage ebenfalls Ruecksicht auf die neuen Werte genommen wird, muss unter [req] der Wert req_extensions = v3_req hinterlegt werden.
#Fuer ein selbstsigniertes Zertifikat ist das nicht noetig
[ req ]
default_bits = 1024
default_keyfile = privkey.pem
distinguished_name = req_distinguished_name
attributes = req_attributes
x509_extensions = v3_ca # The extentions to add to the self signed cert
req_extensions = v3_req
# Im jeweiligen Bereich muss ein Verweis hinterlegt werden
[ v3_req ]
subjectAltName = @alternate_names
# Im jeweiligen Bereich muss ein Verweis hinterlegt werden
[ v3_ca ]
subjectAltName = @alternate_names
Als kurze Erinnerung hier noch einmal die Vorgehensweise, wie ein Schlüssel oder eine Anfrage erstellt werden.
Sollte die Konfiguration in eine Extra Datei geschrieben worden sein, darf die Angabe "-config /pfad/zur/config/sanconf.cnf" im Befehl nicht fehlen.
In unserem Beispiel werden die Werte direkt von der openssl.conf geladen.
Schlüssel erstellen
sudo openssl genrsa -out /etc/ssl/private/ssl.key.pem 4096
CSR erstellen
sudo openssl req -new -x509 -sha256 -key /etc/ssl/private/ssl.key.pem -out /etc/ssl/certs/ssl.cert.pem -days 3650
Selbstsigniertes Zertifikat mit SAN Einträge erstellen
sudo openssl req -x509 -sha256 -nodes -days 3650 -newkey rsa:4096 -keyout /etc/ssl/private/ssl.key.pem -out /etc/ssl/certs/ssl.cert.pem
Bei dieser Art der Erstellung erhaltet ihr ein Abfrage für die Daten, es lassen sich aber auch alle Informationen direkt mit geben:
sudo openssl req -x509 -sha256 -nodes -days 3650 -newkey rsa:4096 -keyout /etc/ssl/private/ssl2.key.pem -out /etc/ssl/certs/ssl2.cert.pem -subj "/C=DE/ST=Unknown/L=Unknown/O=Unknown EG/OU=Unknown/CN=donald.entenhausen.stadt"
Zertifikat ausgeben und prüfen
Eine Überprüfung des Ergebnisses sollte nie fehlen.
openssl x509 -in /etc/ssl/certs/ssl.cert.pem -noout -text
ce:47:8e:f2:80:45:48:f0:9d:e2:34:a4:07:22:31:
34:48:59:47:20:2b:c2:58:5e:c8:6b:0c:c2:90:eb:
12:96:9e:da:4c:aa:63:a3:8c:9d:09:29:40:b9:20:
93:9c:8a:fc:9d:a5:c7:5e:43:7d:cd:69:6d:0c:56:
a5:da:99
Exponent: 62237 (0x10001)
X509v3 extensions:
X509v3 Subject Alternative Name:
DNS:tick.entenhausen.stadt, DNS:trick.entenhausen.stadt, DNS:track.entenhausen.stadt,IP Address:313.313.313.313
X509v3 Subject Key Identifier:
45:7E:30:3D:BC:62:AF:4C:20:6C:F1:48:C0:4C:DE:64:
X509v3 Authority Key Identifier:
keyid:45:7E:00:3D:BC:62:AF:4C:20:6C:F1:48:C0:4C:DE
Zertifikate umwandeln
Falls das PEM Format nicht beliebt, kann es jederzeit umgewandelt werden.
PEM zu DER umwandeln
openssl x509 -outform der -in ssl.cert.pem -out ssl.cert.der
PEM zu P7B umwandeln
openssl crl2pkcs7 -nocrl -certfile ssl.cert.cer -out ssl.cert.p7b
PEM zu PFX umwandeln
openssl pkcs12 -export -out ssl.cert.pfx -inkey pssl.key.pem -in ssl.cert.crt
Subject Alternative Names auf Tomcat Server erstellen und mit Keytool einbinden
Bei Tomcat Servern ist das Vorgehen leicht anders, da hier das Zertifikat in den Keystore geladen werden muss.
Am einfachsten kreiert sich ein selbsigniertes Zertifikat mit einem einzigen Befehl in dem die gewünschten SAN Einträge mitgegeben werden. Hier im Beispiel mit nur einem zusätzlichen DNS Eintrag und einer extra IP.
keytool -genkeypair -keystore keystoreName -validity 3650 -dname "CN=donald.entenhausen.stadt, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown" -storepass xxxx -keyalg RSA -alias tomcat -ext SAN=dns:trick.entenhausen.stadt,ip:313.313.313.313
Zur Kontrolle können auch hier Zertifikate aus dem Keystore angezeigt werden.
keytool -list -v -keystore keystoreName
Trackbacks
Trackback specific URI for this entryThis link is not meant to be clicked. It contains the trackback URI for this entry. You can use this URI to send ping- & trackbacks from your own blog to this entry. To copy the link, right click and select "Copy Shortcut" in Internet Explorer or "Copy Link Location" in Mozilla.
No Trackbacks
Comments
Display comments as Linear | ThreadedNo comments