ich eine Zertifikatsanforderung wie folgt aus:X509Chain.Build() für widerrufenes Zertifikat. C#
certreq -new req.inf req-Revoked.req
certreq -submit -attrib "SAN:[email protected]&[email protected]" -config Win2K8-64\Test-Win2K8-64-CA req-Revoked.req testerCert-Revoked.cer
certreq -accept testerCert-Revoked.cer
CertUtil -f -p testerCert -exportPFX -user My Testing.Tester.T.1234567890 testerCert-Revoked.pfx
CertUtil -delstore -user My Testing.Tester.T.1234567890
Dann habe ich es widerrufen, über:
CertUtil -revoke <SerialNumber_from_above_Cert>
ich dann diesen Code ausführen:
X509Certificate2 certificate = GetCertificate("testerCert-Revoked.pfx", "password"); // helper method loads the pfx from a file
X509Chain chain = new X509Chain();
chain.ChainPolicy.RevocationFlag = X509RevocationFlag.ExcludeRoot;
chain.ChainPolicy.RevocationMode = X509RevocationMode.Online;
chain.ChainPolicy.VerificationTime = DateTime.Now;
chain.ChainPolicy.UrlRetrievalTimeout = new TimeSpan(0, 0, 0);
chain.ChainPolicy.VerificationFlags = X509VerificationFlags.NoFlag;
if (!chain.Build(certificate))
{
errorBuffer.Append("Could not build X.509 certificate chain:\r\n");
foreach (X509ChainStatus status in chain.ChainStatus)
{
errorBuffer.AppendFormat(" - {0}\r\n", status.StatusInformation);
}
throw new CryptographicException(errorBuffer.ToString());
}
chain.Build() gibt immer wahr zurück. Aber da das Zertifikat gesperrt ist, sollte es falsch sein! Ich habe überprüft, dass das Zertifikat gesperrt ist und dass die Seriennummer im Server-Manager unter widerrufenen Zertifikaten aufgeführt ist. Ich habe überprüft, dass die CURL-Verteilungspunkt-URLs auf dem Server und den Zertifikatsanforderungen übereinstimmen. (Sie sind LDAP-URLs). CertUtil sieht die Zwischen-CER-Datei als widerrufen. Aber der C# -Code oben nicht.
Dies alles funktioniert, bevor die ursprüngliche CA abgelaufen ist, und IT baute meine Testmaschine mit einem neuen Zertifikat neu. Ich habe die Zertifikate mit der neuen CA neu erstellt, und jede einzelne Unit-Tests funktionieren wieder, außer denen, die sich mit dem Widerruf befassen. Abgelaufene Zertifikate funktionieren wie erwartet, aber nicht widerrufen.
Ich bin ratlos, was ich als nächstes tun muss, damit dieser Code wieder funktioniert, und ich würde etwas Hilfe brauchen. Vielen Dank!
Ich habe auch die CURL über den Server-Manager veröffentlicht. – ChopperCharles