Wie man mit Zertifikaten umgeht und welche Programme dazu sinnvoll eingesetzt werden können. Hier werden Speziell 2 Programme behandelt und außerdem wird auf den Umgang imt Intermediate Zertifikaten eingegangen:
- OpenSSL
- Windows certutil
- Intermediate Zertifikate in Webserver einbinden
Am Ende erläutere ich kurz, wie man an Zertifikaten in Textdateien erkennt, um welche Art des Zertifikats es sich handelt.
OpenSSL
Exchange Zertifikat erneuern, ohne erneuten Signing Request
- Privaten Key aus PFX extrahieren
- Privaten Key zusammen mit neuem öffentlichen Key der Zertifizierungsstelle kombinieren
Dieser Punkt gleich vorweg, weil er mich bereits das 2. Mal nervt. Einer unserer Zertifikatsaussteller (GoDaddy) stellt bei einer Zertifikatserneurung (Verlängerung) nur ein neues öffentliches Zertifikat aus (Dateiendung .crt). Daher ist kein erneuter Signing Request nötig. Soweit so komfortabel. Leider kann Exchange 2010 ein neues öffentliches Zertifikat nicht mit einem bereits vorhandenen privaten Key verknüpfen. Der private Key wird ja beim Erstellen des Signing Request mit erstellt (gut und sicher aufheben). Den kann GoDaddy also gar nicht wissen. Was muss man nun machen? Man benötigt den ursprünglichen privaten Key, das zugehörige Passwort und den neuen öffentlichen Schlüssel. Der private Key befinet sich bei unse als private/public Pair in einer .pfx-Datei. Also muss man den privaten Schlüssel zuerst aus dieser .pfx-Datei extrahieren und dann mit dem neuen öffentlichen Schlüssel zusammen führen.
openssl pkcs12 -in oldpair.pfx -nocerts -out private.key Enter Import Password: MAC verified OK Enter PEM pass phrase: Verifying - Enter PEM pass phrase: openssl pkcs12 -inkey private.key -in cert.crt -certfile intermediate.crt -export -out cert.pfx Enter pass phrase for private.key: Enter Export Password: Verifying - Enter Export Password:
Nun kann die Datei cert.pfx als Zertifikat über die Exchange Management Konsole importiert werden.
Zertifikatsverlängerung anhand eines Privaten Keys
Für ein Zertifikat einer Unternehmens-PKI kann ein über die CA des Unternehmens ein neues Zertifikat beantragt werden. Den Certificate Signing Request kann man mit OpenSSL erstellen. Man braucht dafür nur den Privaten Key.
openssl req -new -key private.key -out cert.csr -newkey rsa:4096
Den hieraus erzeugten CSR kann man bei der CA einreichen (Base64 Format für das Zertifikat wählen). Man erhält ein öffentlichens X509 Zertifikat (certnew.cer). Dieses kann man zusammen mit dem Private Key wie oben beschrieben zu einer PFX-Datei kombinieren. Man sollte aber vorher testen, ob die Prüfsummen übereinstimmen:
SSL certificate: openssl x509 –noout –modulus –in <file>.crt | openssl md5 RSA private key: openssl rsa –noout –modulus –in <file>.key | openssl md5 CSR: openssl req -noout -modulus -in <file>.csr | openssl md5
Sollten die Prüfsummen nicht übereinstimmen, muss ein neues Zertifikat angefordert werden.
Zertifikat per Signing Request erstellen
Achtung: sollten bei Angaben (Firmenname, Stadt, …) Umlaute nötig sein, so muss openssl mit dem Parameter -utf8 ausgeführt werden.
Einen privaten Key und gleichzeitig einen Signing Request erstellen.
openssl req -utf8 -new -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr
Einen neuen verschlüsselten privaten Key und den Signing Request dazu generieren
openssl req -out CSR.csr -new -newkey rsa:4096 -keyout privateKey.key
Einen neuen privaten Key ohne Verschlüsselung und den Signing Request daz ugenerieren
openssl req -out CSR.csr -new -newkey rsa:4096 -nodes -keyout privateKey.key
Ein selbst signiertes Zertifikat erstellen
openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout privateKey.key -out certificate.crt
Ein Certificate Signing Request (CSR) für einen existierenden privaten Key erstellen
openssl req -out CSR.csr -key privateKey.key -new
Ein CSR für ein existierendes Zertifikat erstellen
openssl x509 -x509toreq -in certificate.crt -out CSR.csr -signkey privateKey.key
Ein Password von einem privaten Key entfernen
openssl rsa -in privateKey.pem -out newPrivateKey.pem
PKCS#1 Private key extrahieren
openssl pkcs12 -in yourP12File.pfx -nocerts -out privateKey.pem
PKCS#1 Zertifikate extrahieren
openssl pkcs12 -in yourP12File.pfx -clcerts -nokeys -out publicCert.pem
Öffentlichen und privaten Schlüssel zusammenführen. Die Dateiendung ist austauschbar. Es können auf diese Weise z.B. auch Dateien mit der Endung .pem angegeben werden.
openssl pkcs12 -export -in publicCert.cer -inkey privateKey.key -out certMerged.pfx
Prüfungen mit OpenSSL
Einen Certificate Signing Request (CRS) prüfen
openssl req -text -noout -verify -in CSR.csr
Einen privaten Key prüfen
openssl rsa -in privateKey.key -check
Ein Zertifikat prüfen
openssl x509 -in certificate.crt -text -noout
Eine PKCS#12-Datei prüfen (.pfx oder .p12)
openssl pkcs12 -info -in Dateiname.p12
Konvertierungen mit OpenSSL
Von DER-Datei (.crt, .cer, .der) nach PEM
openssl x509 -inform der -in certificate.cer -out certificate.pem
Von einer PKCS#12-Datei (.pfx oder .p12), die einen privaten Schlüssel und Zertifikate enthält nach PEM
openssl pkcs12 -in keyStore.pfx -out keyStore.pem -nodes
PEM Zertifikat mit privatem Schlüssel nach PKCS#12 (.pfx oder .p12)
openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt
Entstörung mit OpenSSL
MD5-Hash eines öffentlichen Schlüssels prüfen, um sicherzustellen, dass es mit einem Certificate Signing Request oder einem privaten Schlüssel übereinstimmt.
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
SSL-Verbindung prüfen. Alle Zertifikate (auch Zwischenzertifizierungsstellen) sollten angezeigt werden
openssl s_client -connect www.google.com:443
Windows certutil
PKCS#12-Datei importieren (.pfx oder .p12)
Mit unterem Befehl wird eine PKCS#12-Datei im Benutzerkontext unter eigene Zertifikate importiert. Eine PKCS#12-Datei kann mehrere Zertifikate enthalten. Diese werden mit unterem Befehl alle importiert.
Flags
-user: importiert das Zertifikat im Benutzerkontext. Ohne dieses Flag werden Adminberechtigungen benötigt und es wird versucht das Zertifikat im Speicher für den lokalen Computer abzulegen.
-p: Das Passwort für den privaten Schlüssel des Zertifikats.
„My“: importiert das Zertifikat unter „Eigene Zertifikate“
certutil -p PW -importpfx -user "My" Datei.p12
DER-Datei importieren (.crt .cer .der)
Mit unterem Befehl wird eine DER-Datei im Benutzerkontext unter eigene Zertifikate importiert.
certutil -f -addstore -user -f “My” “Datei.cer”
Beispiel für andere Zertifikatspeicher
certutil -f -addstore "ca" "IntermediateCA.cer" certutil -f -addstore "root" "TrustedCA.cer"
Intermediate Zertifikat in Webserver einbinden
Was ist ein Intermediate Zertifikat?
Intermediate-Zertifikate (Zwischenzertifikate) stellen eine Voraussetzung für das richtige Funktionieren und die Vertrauenswüdigkeit des SSL-Zertifikats auf dem Server dar. Ohne das Intermediate-Zertifikat ist das Zertifikat auf dem Server auch nicht vertrauenswürdig und es ruft die Sicherheitswarnung im Browser hervor.
Apache
In der Konfigdatei kann man ein Intermediate Zertifikat mit einem eigenen Eintrag einbinden:
SSLCertificateChainFile /pfad/zum/crt/intermediate.pem
NginX
Unter NginX muss man das Intermetiate Zertifikat an das Domänenzertifikat „dranklatschen“.
cp domain.crt doamin.crt.orig cat domain.crt.orig Intermediate_CA_Bundle.crt > domain.crt vi domain.crt
Prüfen, ob die Zeile für BEGIN CERTIFICATE und END CERTIFICATE jeweils einzeln in einer Zeile stehen. Wenn nicht mit vi korrigieren.
SSL aktiviert man in NginX mit
ssl on; ssl_certificate /etc/nginx/ssl/inqbus.de_bundle.crt; ssl_certificate_key /etc/nginx/ssl/inqbus.de.key;
Erkennen des Inhalts von base64 codierten Zertifikatsdateien
Eine Offline Zertifikatsanforderung sieht so aus (Dateiendung .req):
—–BEGIN NEW CERTIFICATE REQUEST—–
###################################
—–END NEW CERTIFICATE REQUEST—–
Danach wird eine öffentliche oder private Zertifizierungsstelle genutzt, um die Zertifikatsanforderung abzuschließen (Dateiendung .cer oder .crt):
—–BEGIN CERTIFICATE—–
###################################
—–END CERTIFICATE—–
Der private Schlüssel ist normalerweise auf dem Gerät gespeichert, der die Zertifikatsanfrage erstellt hat. Man könnte den Schlüssel aber extrahieren. Dieser sähe im Klartext dann so aus:
—–BEGIN PRIVATE KEY—–
###################################
—–END PRIVATE KEY—–