Đối mặt với một vấn đề thực sự lạ X509Certificate2.Verify() trả về false cho một chứng chỉ hợp lệ. Có lẽ một số đã phải đối mặt với kịch bản kỳ lạ này trước đây và có thể tỏa sáng một chút trên đó.X509Certificate2.Verify() trả về false luôn
Tôi đang sử dụng openssl để tạo chứng chỉ ứng dụng khách cho mục đích thử nghiệm. Tôi tạo một CA gốc và tạo chứng chỉ ứng dụng khách dựa trên Root CA đó và thêm Root CA vào chuỗi của nó.
Tôi nạp CA gốc và chứng chỉ ứng dụng khách vào kho lưu trữ chứng chỉ cục bộ và có vẻ ok ở đó nhưng khi tôi tải nó từ mã NUnit để kiểm tra X509Certificate2.Verify() luôn trả về false.
Đây là đoạn mã để tải Cert từ các cửa hàng:
X509Store store = new X509Store(StoreName.My);
string thumbprint = "60 d1 38 95 ee 3a 73 1e 7e 0d 70 68 0f 2d d0 69 1e 9a eb 72";
store.Open(OpenFlags.ReadOnly);
var mCert = store.Certificates.Find(
X509FindType.FindByThumbprint,
thumbprint,
true
).OfType<System.Security.Cryptography.X509Certificates.X509Certificate>().FirstOrDefault();
if(mCert != null)
{
var testClientCert = new X509Certificate2(mCert);
}
Đây là Cert khách hàng mà tôi đã tạo ra: (url CRL có thể truy cập từ máy tính địa phương của tôi đúng)
-----BEGIN CERTIFICATE-----
MIIC7jCCAlegAwIBAgIBATANBgkqhkiG9w0BAQUFADBtMR0wGwYDVQQKExRWaXRh
bEhlYWx0aCBTb2Z0d2FyZTElMCMGA1UECxMcVml0YWxIZWFsdGggU29mdHdhcmUg
Um9vdCBDQTElMCMGA1UEAxMcVml0YWxIZWFsdGggU29mdHdhcmUgUm9vdCBDQTAe
Fw0xNTAyMjcwODQ2MzNaFw0xNjAyMjcwODQ2MzNaMEUxHTAbBgNVBAoTFFZpdGFs
SGVhbHRoIFNvZnR3YXJlMREwDwYDVQQLEwhQbGF0Zm9ybTERMA8GA1UEAxMIVGVz
dFVzZXIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOkfyjX0PSnRYrBbCC8u
rw7IiFdAUj6frPKEmt0TLAR/4g+NazKdGjRRqxE9mNwX/2zGhIcucfGDVwPtOtiV
opicQEzGiSQkvAc+473MN5D6j3XtBYblALMeMyEYoh3LnHO4K+6kV6XE4BXV/2lV
mAVgXGkZzaayd40DLvg48vPlAgMBAAGjgcUwgcIwCQYDVR0TBAIwADARBglghkgB
hvhCAQEEBAMCB4AwCwYDVR0PBAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMCMDEG
CWCGSAGG+EIBDQQkFiJPcGVuU1NMIENlcnRpZmljYXRlIGZvciBTU0wgQ2xpZW50
ME0GA1UdHwRGMEQwQqBAoD6GPGh0dHA6Ly9wbGF0Zm9ybWRhc2hib2FyZC5ubC52
aXRhbGhlYWx0aC5sb2NhbC9wb3J0YWwvY3JsLmNybDANBgkqhkiG9w0BAQUFAAOB
gQBXYSmZaVu6vnyl94SO4qpNOutsUm4p7fQHehljhZ+aRrXE10rivWCt4g0k961E
PDsp4J0DR6uth6et42pBp8v2gFIGSQY/F7NhmOAsOJvM7z0oIBxMLcclIDTygbRp
KjZZpNjvf+YJasbidosiL4VSeRiCZ+HPzvKDb3wNeafoZA==
-----END CERTIFICATE-----
Và đây là tệp CRL được tải xuống khi tôi truy cập nó từ trình duyệt:
-----BEGIN X509 CRL-----
MIIBMjCBnDANBgkqhkiG9w0BAQUFADBtMR0wGwYDVQQKExRWaXRhbEhlYWx0aCBT
b2Z0d2FyZTElMCMGA1UECxMcVml0YWxIZWFsdGggU29mdHdhcmUgUm9vdCBDQTEl
MCMGA1UEAxMcVml0YWxIZWFsdGggU29mdHdhcmUgUm9vdCBDQRcNMTQwODA3MTQz
OTIyWhcNMTQwOTA2MTQzOTIyWjANBgkqhkiG9w0BAQUFAAOBgQA8MSxAorbxpdDm
1IA2Aqjb/OkZydua1Tm5k5KtHknI4zyYPZb3GzO0eRygpKBSAqtYkxDI6eCv6xgf
+anXT56md+cPGZ+2YvSicxqwP2GL2kymc9mVMTiQieioS1/7apjCIjZEgWxqf3Up
zvy/kNQRg3lII8hYu0idGs9byKZJFQ==
-----END X509 CRL-----
Có một số câu hỏi về vấn đề này, như thế này: http://stackoverflow.com/questions/1277791/x509certificate2-validation-on-web- dịch vụ Bạn đã thử bất kỳ điều nào trong số này chưa? – weston
@weston Vâng, thực sự. Tôi đã kiểm tra liên kết sau có vẻ như của tôi, http://stackoverflow.com/questions/10137208/x509certificate2-verify-method-always-return-false-for-the-valid-certificate?rq=1 nhưng sau đó tôi có thể truy cập url CRL trong chứng chỉ máy khách của tôi tốt từ trình duyệt và tôi đang sử dụng các kiểm tra Nunits chạy trong tài khoản người dùng Windows cục bộ mà tôi đã sử dụng để cài đặt Cert và RootCA của nó vào cửa hàng Cert hiện tại cho người dùng Windows này . – Deb
vui lòng xuất chứng chỉ này sang tệp và hiển thị cho chúng tôi đầu ra lệnh certutil: 'certutil -verify -urlfetch \ file.cer'. –
Crypt32