validar una tls seguro relación pudo para establecer consumir confianza con certificado canal autoridad wcf silverlight http https certificate

una - ¿Cómo le digo a WCF que salte la verificación del certificado?



no se pudo establecer una relación de confianza para el canal seguro ssl/tls con la autoridad (2)

Intentar realizar una llamada de servicio web a un punto final HTTPS en mi aplicación Silverlight genera este error: "No se pudo encontrar una dirección base que coincida con el esquema https para el punto final con vinculación WSHttpBinding. Los esquemas de dirección base registrados son [http]"

El mismo problema que se publicó aquí:

http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/4c19271a-f5e6-4659-9e06-b556dbdcaf82/

Entonces, una de las sugerencias fue esta: "El otro problema podría ser que el nombre del certificado y el nombre de la máquina no concuerdan, y esto está causando que WCF tenga ajustes. Si este es el caso, puede decirle a WCF que omita la verificación del certificado ".

Bueno, obtengo un error de certificado porque este es solo un servidor de demostración.

Así es como configuré mi cliente:

BasicHttpBinding binding = new BasicHttpBinding(); binding.Security.Mode = BasicHttpSecurityMode.Transport; _ws = new AnnotationService.AnnotationClient(binding, new EndpointAddress(myAddress));

¿Cómo puedo decirle a WCF que omita la verificación?


Es posible que pueda lograr esto en Silverlight al permitir la comunicación entre dominios entre el servidor web, los hosts, la aplicación Silverlight y el servicio remoto WCF.

En ese caso, debe colocar un archivo clientaccesspolicy.xml en la raíz del dominio donde se aloja el servicio WCF:

<?xml version="1.0" encoding="utf-8"?> <access-policy> <cross-domain-access> <policy> <allow-from http-request-headers="SOAPAction"> <domain uri="http://*"/> </allow-from> <grant-to> <resource path="/" include-subpaths="true"/> </grant-to> </policy> </cross-domain-access> </access-policy>

Esto es lo que dice MSDN sobre este enfoque :

Para permitir el acceso a un servicio HTTPS desde cualquier control de Silverlight alojado en una aplicación HTTP, debe colocar el elemento <domain uri = "http: // " /> * dentro de su elemento <allow-from> .

No lo he probado, pero podría valer la pena intentarlo. También asegúrese de consultar los siguientes recursos para obtener más detalles:

Desactivando la validación del certificado X.509 en .NET

Para las aplicaciones .NET, esta configuración de WCF de muestra deshabilitará la validación de si el certificado es confiable y si aún es válido en el cliente:

<system.serviceModel> <behaviors> <endpointBehaviors> <behavior name="DisableServiceCertificateValidation"> <clientCredentials> <serviceCertificate> <authentication certificateValidationMode="None" revocationMode="NoCheck" /> </serviceCertificate> </clientCredentials> </behavior> </endpointBehaviors> </behaviors> <client> <endpoint address="http://localhost/MyService" behaviorConfiguration="DisableServiceCertificateValidation" binding="wsHttpBinding" contract="MyNamespace.IMyService" name="MyServiceWsHttp" /> </client> </system.serviceModel>

Una solución alternativa es proporcionar una lógica personalizada para validar el certificado X.509 proporcionado por el servicio. En ese caso, deberá modificar el archivo de configuración de acuerdo con lo siguiente:

<system.serviceModel> <behaviors> <endpointBehaviors> <behavior name="DisableServiceCertificateValidation"> <clientCredentials> <serviceCertificate> <authentication certificateValidationMode="Custom" customCertificateValidatorType="MyCertificateValidator, Client" revocationMode="NoCheck" /> </serviceCertificate> </clientCredentials> </behavior> </endpointBehaviors> </behaviors> <client> <endpoint address="http://localhost/MyService" behaviorConfiguration="DisableServiceCertificateValidation" binding="wsHttpBinding" contract="MyNamespace.IMyService" name="MyServiceWsHttp" /> </client> </system.serviceModel>

Luego crea una clase que derive de X509CertificateValidator para implementar tu lógica de validación personalizada.

public class MyCertificateValidator : X509CertificateValidator { public override void Validate(X509Certificate2 certificate) { // Add custom validation logic // Throw an exception to fail validation } }

Como siempre, puede encontrar un ejemplo más detallado en MSDN.


Esto no parece un error de validación de certificado. Parece un error de configuración del servicio web. ¿Puedes publicar la configuración de tu punto final en el servidor?

Los servicios de WCF no son compatibles con SSL de forma predeterminada, debe habilitar la seguridad de transporte creando una configuración de enlace y apuntando su punto final con el atributo bindingConfiguration.

Aquí hay una configuración de enlace de muestra que admite SSL:

<bindings> <basicHttpBinding> <binding name="SecureTransport"> <security mode="Transport"> <transport clientCredentialType="None"/> </security> </binding> </basicHttpBinding> </bindings>

y su configuración de punto final se vería así:

<endpoint address="" binding="basicHttpBinding" bindingConfiguration="SecureTransport" contract="MyServices.IWebService" />