Zwischenzertifizierungsstelle erstellen, die Zertifikate ausstellen kann?

701
Nuvious

Ich versuche, eine Zertifizierungsstelle und eine Zwischenzertifizierungsstelle für Office 365-Signierungs- / Verschlüsselungszwecke in Outlook zu erstellen. Ich konnte eine Reihe von Tutorials verfolgen und mit OpenSSL eine Zertifizierungsstelle und eine Zwischenzertifizierungsstelle erstellen, die Zertifikate generieren. Ich habe zwei Probleme:

  1. Wenn ich ein Endbenutzerzertifikat für Endbenutzer x509 generiere, wird es als ungültig gekennzeichnet, da die Zwischenzertifizierungsstelle keine Berechtigung zum Ausstellen von Zertifikaten besitzt.
  2. Wenn ich stattdessen das Endbenutzerzertifikat mit der Stammzertifizierungsstelle generiere, kann ich E-Mails problemlos signieren und verschlüsseln. Nach einiger Zeit funktioniert das Zertifikat jedoch nicht mehr.

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

Ich denke, die Lösung von Problem 1 wird Problem 2 lösen, aber ich kann nicht die Berechtigungen für eine Zwischenzertifizierungsstelle festlegen, um Zertifikate auszustellen. Irgendeine Hilfe?

So generiere 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 Kunden 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 
0

1 Antwort auf die Frage

0
Nuvious

Im Grunde habe ich nicht unbedingt herausgefunden, wie man das Problem mit OpenSSL lösen kann, aber ich habe festgestellt, dass GnuTLS zur Verwendung des Zertifikats auf eine Art und Weise auffordert, die einfach zu handhaben ist.

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 

Wo meine ca.vars aussehen:

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 ca.vars-Datei aufgeführt, die nicht sicher ist. Bei meiner Implementierung generiert ein Skript jedoch die vars-Datei und löscht sie dann mit dem srm-Löschwerkzeug. Wenn Sie keine Skripts zum Generieren Ihrer VARS-Dateien verwenden, lassen Sie einfach die Zeilen Kennwort und Herausforderung_Kennwort aus. Sie werden 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 Verfallszeit auf 365 gesetzt habe und die folgende Zeile hinzufüge:

path_len = 1 

Von dort 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 werde es noch einmal als Referenz einfügen:

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 jemandem außer mir! :)