Estoy tratando de usar certificados programáticamente, en lugar de usar la tienda. Estoy creando X509Certificate2
con nombre de archivo y contraseña.WCF Certificate Chain, verifique programáticamente
Esto funciona bien cuando agregué manualmente el certificado raíz al almacén de certificados en Trusted People. Sin embargo, preferiría no tener que hacer eso en cada implementación; prefiero tratarlo programáticamente también.
Cuando elimino el certificado raíz del almacén de certificados obtengo una excepción.
Todo lo que he leído parece indicar que tengo que agregar manualmente el certificado raíz al Certificate Store o que la cadena de confianza no funcionará.
Pregunta: ¿Existe alguna manera programática de configurar Trust Chain, por lo que no tengo que hacerlo manualmente?
El código es el siguiente:
var serverCert = new X509Certificate2("FullPathToMyCertificate.cer", "Password");
Client.ClientCredentials.ServiceCertificate.DefaultCertificate = serverCert;
La excepción, que occures cuando trato de usar el cliente, es:
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.
Muchas gracias por la rápida respuesta, Yahia. Entonces, digamos que quería implementar un ** CustomCertificateValidator ** que imitaba el comportamiento predeterminado que ocurre cuando no uso ** CustomCertificateValidator ** pero he agregado manualmente el certificado raíz al Certificate Store en Trusted People. ¿Qué pondría en mi ** CustomCertificateValidator **? Presumiblemente, el comportamiento predeterminado evalúa el ** serverCert ** contra el certificado raíz en Trusted People, decide si está correcto y permite que el cliente reciba la respuesta.¿Qué hace para hacer esta evaluación? Gracias de nuevo, Steve. – Steve
¿a qué se refiere el cliente aquí (por ejemplo, en Client.ServiceCertificate), naespace, por favor? Muchas gracias. – iTSrAVIE
Este NO es un espacio de nombres. Este código supone que se encuentra en una clase derivada de System.ServiceModel.ClientBase <> y esta "ClientBase" expone, diciendo simplemente, una propiedad 'ClientCredentials' en la que puede hacer '.ServiceCertificate' y luego '.Authentication' then '. CertificateValidationMode "y así sucesivamente. Si necesita saber exactamente, el ServiceCertificate es una clase X509CertificateRecipientClientCredential – quetzalcoatl