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:

  1. OpenSSL
  2. Windows certutil
  3. 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
  1. Privaten Key aus PFX extrahieren
  2. 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.

Beschreibung von SSLMarket

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—–