enable consume wcf ssl-certificate

consume - wcf transport security



Error de WCF: "Error en el certificado X.509 CN=cadena localhost..." (8)

Recibo este error al intentar hacer que mi cliente WCF y el servidor hablen entre sí.

El certificado X.509 CN = localhost chain building failed. El certificado que se utilizó tiene una cadena de confianza que no se puede verificar. Reemplace el certificado o cambie el certificateValidationMode. Una cadena de certificados procesada, pero terminada en un certificado raíz que no es confiable para el trust.

Todo funciona perfectamente si desactivo certificados SSL.


(Pensé que podría compartir esto solo en caso de que ahorre a alguien en algún momento). Me encontré con este problema al ejecutar una aplicación web en WIF. Solucioné mi problema moviendo una copia del certificado x.509 con el que estaba trabajando desde la carpeta "Certificados / personales / certificados" a la carpeta "Autoridades de certificación raíz de confianza / Certificados" dentro del almacén de certificados. Puede hacerlo ejecutando la consola de administración de Microsoft


Agregue el comportamiento del punto final en su aplicación cliente (p. Ej .: App.config) y establezca la configuración de comportamiento que agregó en el punto final.

<behaviors> <endpointBehaviors> <behavior name="certificateEndpointBehavior"> <clientCredentials> <serviceCertificate> <authentication certificateValidationMode="None" revocationMode="NoCheck"/> </serviceCertificate> </clientCredentials> </behavior> </endpointBehaviors> </behaviors> <endpoint address="http://localhost/Invoice.svc" binding="wsHttpBinding" bindingConfiguration="WsHttpBinding_ACKS" contract="Invoice" name="Invoice" behaviorConfiguration="certificateEndpointBehavior" > </endpoint>


Al desactivar el método revocationMode, es muy probable que le falte una lista de revocación del cliente para su CA raíz.

makecert -crl -n "CN=CARoot" -r -sv CARoot.pvk CARoot.crl

Esto también debe importarse a las autoridades certificadoras de confianza. Ver también mi respuesta aquí .


Lo correcto es configurar su propio Dev / Test Trusted Root Certificate y firmar sus certificados de cliente y servicio con esto.

Omitir la confianza de la cadena en su entorno Dev / Test puede "funcionar", pero su entorno Dev / Test ahora está configurado de forma diferente a Production, lo cual no es una gran idea, ya que algunas pruebas pueden producir falsos positivos o falsos negativos.


Siguiendo con el comentario anterior de Aseiu, descubrí que el mismo error exacto anterior se emitirá cuando falte el certificado de la tienda de confianza en el servidor. Al investigar el problema, también encontré que al mirar el visor de eventos en Windows Logs / Application contendrá un error que detalla el certificado con el que está teniendo un problema. También puede correlacionar el registro de actividad con las entradas en el registro de SVC para el servicio.


Solucioné el problema desactivando la validación en mi código de esta manera:

client.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode = System.ServiceModel.Security.X509CertificateValidationMode.None;

Donde el client es una instancia de mi referencia de servicio.


Tuve algunas dificultades con este mismo problema exacto. Estaba usando la muestra CustomToken-VS2010 del WIF SDK.

La muestra no tiene un app.config y creo que saber cómo funciona el código es útil de todos modos, así que dediqué un tiempo a investigar esto. Siento que debería mostrar mis resultados aquí. Espero que esta inforamation sea útil.

Tuve el mismo problema. El problema que tuve fue "¿dónde configuro este modo?" Tuve un momento difícil para encontrar el objeto que tenía esta propiedad para establecer que en realidad era el objeto correcto. Finalmente lo encontré como parte de ChannelFactory :

using System.ServiceModel.Security; : ChannelFactory<IEcho> echoChannelFactory = new ChannelFactory<IEcho>(...) echoChannelFactory.Credentials.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None;

Entonces, el lugar para configurar esto está en el objeto ChannelFactory.

Al ejecutar Visual Studio 2010 como administrador local, pude hacer que la muestra funcionara (después de haber ejecutado también el archivo por lotes asociado con todas las muestras para crear el certificado, etc.)

Una vez más, esto no es algo que haría en un entorno de producción , pero saber cómo configurar el modo de autenticación del certificado de servicio es probablemente algo muy bueno de conocer en general.


Hay un problema con su certificado (supongo que usa un certificado autofirmado) WCF intenta verificar toda la cadena de emisores y espera que finalmente la cadena termine en la autoridad de confianza de la raíz. Para deshabilitar esa comprobación, podría agregar dicha línea a la rama app.config. Pero esta "muleta" no debe usarse en el servicio de producción serviceBehaviors/behavior/serviceCredentials/clientCertificate

<authentication certificateValidationMode="PeerOrChainTrust" revocationMode="NoCheck" />