Tôi đang cố gắng sử dụng chứng chỉ theo chương trình, thay vì sử dụng cửa hàng. Tôi đang tạo X509Certificate2
với tên tệp và mật khẩu.Chuỗi chứng chỉ WCF, xác minh theo chương trình
Điều này hoạt động tốt khi tôi đã thêm thủ công chứng chỉ gốc vào Cửa hàng chứng chỉ trong Người đáng tin cậy. Tuy nhiên, tôi không muốn phải làm điều đó trên mọi triển khai - tôi cũng muốn giải quyết nó theo cách lập trình.
Khi tôi xóa chứng chỉ gốc khỏi Cửa hàng chứng chỉ, tôi nhận được ngoại lệ.
Mọi thứ tôi đã đọc dường như nói rằng tôi phải thêm thủ công chứng chỉ gốc vào Cửa hàng chứng chỉ hoặc Chuỗi tin cậy sẽ không hoạt động.
Câu hỏi: Có cách lập trình để thiết lập Chuỗi tin cậy không, vì vậy tôi không phải thực hiện thủ công?
Mã này trông giống như:
var serverCert = new X509Certificate2("FullPathToMyCertificate.cer", "Password");
Client.ClientCredentials.ServiceCertificate.DefaultCertificate = serverCert;
Trường hợp ngoại lệ, mà occures khi tôi cố gắng sử dụng các khách hàng, đó là:
System.IdentityModel.Tokens.SecurityTokenValidationException
The X.509 certificate CN=notrealcertname, OU=TPA, OU=BMP, OU=Projects, O=Somebody, C=US is not in the trusted people store.
The X.509 certificate CN=notrealcertname, OU=TPA, OU=BMP, OU=Projects, O=Somebody, C=US chain building failed.
The certificate that was used has a trust chain that cannot be verified.
Replace the certificate or change the certificateValidationMode.
A certificate chain could not be built to a trusted root authority.
Cảm ơn rất nhiều cho các phản ứng nhanh chóng, Yahia. Vì vậy, sau đó, cho phép nói rằng tôi muốn thực hiện một ** CustomCertificateValidator ** bắt chước hành vi mặc định xảy ra khi tôi không sử dụng ** CustomCertificateValidator ** nhưng đã thêm thủ công chứng chỉ gốc vào Certificate Store trong Trusted People. Tôi sẽ đặt gì trong ** CustomCertificateValidator ** của mình? Có lẽ hành vi mặc định đánh giá ** serverCert ** đối với chứng chỉ gốc trong Trusted People, quyết định OK của nó và cho phép máy khách nhận được phản hồi.Nó làm gì để thực hiện đánh giá này? Cảm ơn một lần nữa, Steve. – Steve
những gì khách hàng đề cập đến ở đây (nói trong Client.ServiceCertificate.), Naespace xin vui lòng? Cảm ơn nhiều. – iTSrAVIE
Đây KHÔNG phải là không gian tên. Mã này giả định rằng nó nằm trong một lớp có nguồn gốc từ System.ServiceModel.ClientBase <> và "ClientBase" này cho thấy, một thuộc tính 'ClientCredentials' mà bạn có thể làm '.ServiceCertificate' rồi '.Authentication' rồi '. CertificateValidationMode "và như vậy. Nếu bạn cần biết chính xác, ServiceCertificate là một lớp X509CertificateRecipientClientCredential – quetzalcoatl