CRYPT_E_NOT_FOUND beim importieren Zertifikat
Ich bin versucht, zu automatisieren den Prozess der Erstellung eines certificate signing request, und dann importieren Sie die Antwort der CA auf einem Windows Server 2012 R2-server als ein cert für eine SSL-Bindung im IIS. Ich bin in der Lage, zum generieren der CSR, die ich dann an das security-team sorgt dann dafür, mich mit einer Antwort zu importieren, bin aber Probleme bekommen es zu importieren.
Dieser server ist in einer Arbeitsgruppe. Dachte, ich würde erwähnen, dass so keine AD-Registrierungs-Politik.
Hier mein Verfahren:
- Generieren eines CSR mit certreq.exe auf dem server in Frage. Eine INF-Datei erzeugt, die so aussieht:
[Version] Signature = "$Windows NT$" [NewRequest] Subject = "C=US,S=California,L=City,O=Company,OU=IT,CN=hostname" Exportable = TRUE KeyLength = 2048 KeySpec = 1 KeyUsage = 0xa0 MachineKeySet = True ProviderName = "Microsoft RSA SChannel Cryptographic Provider" ProviderType = 12 Silent = True SMIME = False RequestType = PKCS10
Diese INF-Datei bekommt dann verwandelte sich in die CSR .req-Datei zu tun:
certreq.exe -new "C:\inffile.inf" "C:\certreq.req"
Den REQ-Datei versandt wird, um das security-team, und Sie geben mir wieder ein .CER-Datei, die beim Import manuell, tatsächlich bietet drei Zertifikate von Digicert. Das Zertifikat erwarte ich, und was aussieht, um einige der intermediate CAs.
Hier ist was, das aussieht wie beim Import über die MMC das Zertifikate-Snap-in.
Wenn ich importieren Sie das Zertifikat über die MMC, wie diese es nicht zeigen, bis in der IIS-manager unter Server-Zertifikate, so schaute ich ein wenig tiefer. Ich habe versucht, um die komplette certificate signing request, die über den IIS-manager, wie dies und das cert zeigt, und ich bin glücklich.
Jedoch kann ich nicht über die GUI, da bin ich über ein Skript.
Ich bestätigen, dass die Anforderung ist im Zertifikat-Registrierungs-Anfragen mit dem privaten Schlüssel.
Ich bestätigen, dass der öffentliche Schlüssel von der CSR und die p7b ich wieder bereitgestellt werden, sind die gleichen.
certutil -dump issuedcert.cer
certutil -dump certreq.req
PROBLEM: ich exportiert das CSR-Zertifikat von Registrierungs-Anfragen und schaute auf den öffentlichen Schlüssel. Es war NICHT der gleiche wie der in issuedcert.cer. Wie es aussieht wird das das problem aber warum?
Ich dann versuchen, zu verwenden certreq.exe akzeptieren Sie die Antwort, und es funktioniert nicht.
certreq.exe -accept -machine "C:\issuedcert.cer"
Fast fertig, aber Nein. Ich ständig diese Fehlermeldung erhalten:
- siehe meine bearbeitete Antwort.
- Haben Sie versucht, entfernen die 2 Zwischenprodukte aus der cer-Datei? Sollten die unteren 2 wenn Sie die Datei in Editor öffnen, vorausgesetzt, dass der standard-base64-codierte DER-Einträge
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser Fehler zeigt an, dass certreq war nicht in der Lage zu finden, zugehörige request-Objekt in der Certificate Enrollment Requests Knoten in den Zertifikatspeicher.
Darüber hinaus würde ich vorschlagen, zu prüfen, ob der öffentliche Schlüssel in dem Zertifikat-request übereinstimmen, die in das ausgestellte Zertifikat. Sie können
certutil -dump file.req
Befehl dump request-Datei (es wird public key) und einemcerutil -dump cert.cer
dump Zertifikat ausgestellt hat, und vergleichen Sie den öffentlichen Schlüssel. Machen Sie dasselbe für jedes Objekt in der Certificate Enrollment Requests Knoten in den Zertifikatsspeicher (konzentrierte sich auf die Lokale Maschine-Kontext) zu finden request-Objekt mit den passenden öffentlichen Schlüssel.hier ist die Funktion, die ich in der Vergangenheit verwendet habe:
Adam, versuchen zu umbenennen .cer .p7b und versuchen certreq-accept-Datei.p7b.
Certreq scheint, suchen Sie nach der Datei-extension um die Datei zu bestimmen Art. Es unterstützt die p7b-Datei -akzeptieren Sie nach der MS-docs.
Das problem könnte sein, dass DigiCert Root CA ist nicht vertrauenswürdig in Ihrem windows 2012 system. Versuchen Sie, importieren Sie Sie manuell in die Vertrauenswürdige Stammzertifizierungsstellen in "LocalMachine" speichern.
Dann würde ich überprüfen, ob es noch eine Anfrage im Zertifikat-Registrierungs-Anfragen in "LocalMachine" Speicher mit MMC.
Wenn es ist, dann sollte es funktionieren, einfach importieren Sie das Zertifikat gegeben, um LocalMachine/My-Speicher (MMC-der name ist eine Persönliche)
Wenn es keine Anfrage gibt es dann importieren Zertifikat in LocalMachine/My-Shop. Dann laufen
certutil -store my
im cmd. Es geht durch alle Zertifikate in LocalMachine/My, anzeigen von Informationen über Sie und versuchen, die Verschlüsselung zu testen. Ich gehe davon aus, dass alle ver-tests fehl. Das wichtigste ist, um index-Zertifikat (Zertifikate beginnen mit index 0). Finden Sie die Nummer des Zertifikats und verwenden Sie dann den BefehlDieser wird versuchen, zu reparieren, die Verbindung zwischen dem Zertifikat und dem privaten Schlüssel. Beim ausführen
certutil -store my
Sie wieder sehen sollte, die Verschlüsselung bestanden.