Zwischenzertifizierungsstelle erstellen, die Zertifikate ausstellen kann?

Zwischenzertifizierungsstelle erstellen, die Zertifikate ausstellen kann?

Ich versuche, eine Zertifizierungsstelle und eine Zwischenzertifizierungsstelle für die Verwendung in Office 365-Signatur-/Verschlüsselungszwecken in Outlook zu erstellen. Ich konnte eine Reihe von Tutorials befolgen und mit OpenSSL eine Zertifizierungsstelle und eine Zwischenzertifizierungsstelle erstellen, die Zertifikate generieren. Ich stoße auf zwei Probleme:

  1. Wenn ich ein Endbenutzerzertifikat vom Typ x509 erstelle, wird es als ungültig gekennzeichnet, da die Zwischenzertifizierungsstelle nicht zum Ausstellen von Zertifikaten berechtigt ist.
  2. Wenn ich stattdessen das Endbenutzerzertifikat mit der Stammzertifizierungsstelle erstelle, kann ich E-Mails problemlos signieren und verschlüsseln, aber nach einer Weile funktioniert es nicht mehr.

Ich denke, Problem 2 wird dadurch verursacht, dass die Endbenutzerzertifikate nicht von der Zwischenzertifizierungsstelle signiert wurden. In Exchange Online gibt SMIMEExpiredCertificateThumbprint den Fingerabdruck des Zwischenzertifikats zurück, nicht den der Stammzertifizierungsstelle. Ich kann immer noch ein von der Stammzertifizierungsstelle generiertes Endbenutzerzertifikat in der GAL veröffentlichen und ein paar schnelle E-Mails senden, aber sobald Outlook mit der GAL synchronisiert ist, erkennt es, dass das Zertifikat nicht aus dem Zwischenzertifikat generiert wurde, und erklärt es für nicht autorisiert.

Ich denke, dass Problem 2 durch die Lösung von Problem 1 gelöst wird, aber ich weiß nicht, wie ich einer Zwischenzertifizierungsstelle die Berechtigung zum Ausstellen von Zertifikaten erteile. Kann mir jemand helfen?

So erstelle ich derzeit eine Stamm- und Zwischenzertifizierungsstelle:

openssl genrsa -out ca.key 4096
openssl req -new -x509 -days 1826 -key ca.key -out ca.crt
openssl genrsa -out ia.key 4096
openssl req -new -key ia.key -out ia.csr
openssl x509 -req -days 730 -in ia.csr -CA ca.crt -CAkey ca.key -serial -out ia.crt

Und so werden die Clients generiert:

openssl genrsa -aes128 -out email.key 2048
openssl req -new -key email.key -out email.csr
openssl x509 -req -days 365 -in email.csr -CA ia.crt -CAkey ia.key -CAcreateserial -out email.crt
openssl pkcs12 -export -in email.crt -inkey email.key -out email.pfx
openssl x509 -in email.crt -serial -noout >> email.meta
openssl x509 -in email.crt -fingerprint -noout  >> email.meta

Antwort1

Ich habe also im Grunde nicht unbedingt herausgefunden, wie sich das Problem mit OpenSSL lösen lässt, habe aber festgestellt, dass GnuTLS auf eine Weise zur Verwendung von Zertifikaten auffordert, mit der man leicht arbeiten kann.

Ich generiere die Stammzertifizierungsstelle wie folgt:

certtool --generate-privkey --bits 4096 --outfile ca.key
certtool --generate-self-signed --load-privkey ca.key --template ca.vars --outfile ca.crt

So sieht mein ca.vars aus:

organization = [Company Name]
unit = [Org Unit]
locality = [City]
state = [State]
country = [Country Code]
challenge_password = [password]
password = [password]
expiration_days = 1825
serial = 1
ca
cert_signing_key
crl_signing_key
cn = '[Company Name] Root CA 000001'

HINWEIS: Das Passwort ist in der Datei ca.vars aufgeführt, die unsicher ist. Für meine Implementierung generiert jedoch ein Skript die Vars-Datei und löscht sie dann mit dem SRM-Löschtool. Wenn Sie keine Skripts zum Generieren Ihrer Vars-Dateien verwenden, lassen Sie einfach die Zeilen „password“ und „challenge_password“ weg, und Sie werden dazu aufgefordert.

Dann die Zwischen-CAs wie folgt:

certtool --generate-privkey --bits 4096 --outfile ia.key
certtool --generate-request --template ia.vars --load-privkey ia.key --outfile ia.csr
certtool --generate-certificate --template ia.vars --load-request ia.csr --load-ca-certificate ca.crt --load-ca-privkey ca.key  --outfile ia.crt

Der Unterschied zwischen ca.vars und ia.vars besteht darin, dass ich die Ablauftage auf 365 setze und die folgende Zeile hinzufüge:

path_len = 1

Von dort aus kann ich das obige Skript mit OpenSSL und den Zertifizierungsstellen ia_[sign/encrypt] verwenden, um x509-Zertifikate zu generieren, die ich in Outlook mit Office 365 zum Signieren/Verschlüsseln von E-Mails verwenden kann. Ich füge es nur zur Referenz noch einmal ein:

openssl genrsa -aes128 -out email.key 2048
openssl req -new -key email.key -out email.csr
openssl x509 -req -days 365 -in email.csr -CA ia.crt -CAkey ia.key -CAcreateserial -out email.crt
openssl pkcs12 -export -in email.crt -inkey email.key -out email.pfx
openssl x509 -in email.crt -serial -noout >> email.meta
openssl x509 -in email.crt -fingerprint -noout  >> email.meta

Hoffe, das hilft noch jemandem außer mir! :)

verwandte Informationen