2011-01-26 52 views
5
administrador

servicio web me dio WSDL, dos certificados y una clave privada:¿Cómo consumir un servicio SOAP sobre HTTPS en C#?

service.wsdl 
ssl.cer 
auth_cert.pem 
auth_private_key.pem 

En Visual Studio 2010 he añadido una referencia Web (Servicio de referencia no funcionaba) desde el WSDL. Luego trató de utilizar, ya que era un cliente de jabón http:

MySoapClient client = new MySoapClient(); 
client.Operation(); 

y yo obtener este seguimiento de la pila:

Unhandled Exception: System.Net.WebException: The request was aborted: Could not create SSL/TLS secure channel. 
    at System.Web.Services.Protocols.WebClientProtocol.GetWebResponse(WebRequest request) 
    at System.Web.Services.Protocols.HttpWebClientProtocol.GetWebResponse(WebRequest request) 
    at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters) 

Lo que tengo que ver con los certificados y claves privadas?
No puedo encontrar ningún tutorial en línea ni libros que cubran este asunto. ¿Alguna pista?

actualización

Acceso al punto final con Firefox :

SSL peer cannot verify your certificate. (Error code: ssl_error_bad_cert_alert)

+1

@Tommaso: debería haber usado la referencia de servicio. ¿Qué no funcionó? –

+0

¿El punto final del servicio admite conexiones https? –

+0

@John Saunders: "Agregar referencia de servicio" genera un resguardo 'vacío': declaración de espacio de nombres solamente – Tommaso

Respuesta

0

El administrador parece que le han dado los archivos utilizados para la configuración de SSL en el servidor. Debería poder ejecutar service.wsdl a través de WSDL.exe para generar un proxy C#, que es lo que VS hace cuando agrega una referencia web. Sin embargo, no creo que este sea tu problema. Está viendo un problema de nivel de red ya que la excepción es una System.Net.WebException.

Los otros archivos parecen que son lo que el administrador estaba usando para agregar SSL al servidor. Al compartir la clave privada, puede haber comprometido la seguridad si hay servicios habilitados para SSL que utilicen esta clave. Debe buscar los puntos finales del servicio en el WSDL e intentar acceder a los de su navegador a través de SSL (https: //). Si no puede, entonces hay un problema de configuración del servidor. Corrija la configuración de SSL en el servidor y su WSDL debería funcionar, o al menos tendrá un nuevo problema.

+0

Firefox al punto final: "El par SSL no puede verificar su certificado. (Código de error: ssl_error_bad_cert_alert)" – Tommaso

+0

administrador dice que auth_cert.pem es el "certificado de presentación" y auth_private_key.pem la clave privada relativa que "debo usar para encriptar la conexión " – Tommaso

6

Webservice administrator gave me WSDL, two certificates and a private key

Si solo consume el servicio, no necesita la clave privada. Supongo que quieres autenticación bidireccional con https. Si este es el caso aquí es cómo funciona:

En el servidor, el administrador debe instalar el certificado con una clave privada para habilitar SSL (la clave se utiliza durante el protocolo de enlace SSL). El cliente usa su clave pública para verificar si el certificado es válido y para autenticar el servicio, por lo que en el lado del cliente, de alguna manera, debe verificarlo. Si ambas máquinas están en dominio de Windows, esto es fácil (se puede configurar para usar la Autoridad de certificación de dominio). De lo contrario, necesita que todos los cert que se usaron para firmar el certificado del servidor original se instalen en la máquina del cliente (en el almacenamiento de la CA de raíz confiable).

La segunda parte es la autenticación del cliente en el servidor. Instalar el certificado de cliente (que contiene la clave pública) para el almacenamiento personal y configurar WCF proxy para utilizarlo:

<behaviors> 
    <endpointBehaviors> 
     <behavior name="certSecureBehavior"> 
      <clientCredentials> 
       <clientCertificate findValue="client-CN" storeLocation="LocalMachine" x509FindType="FindBySubjectName" storeName="My"/> 
       <serviceCertificate> 
        <defaultCertificate findValue="server-CN" storeLocation="LocalMachine" x509FindType="FindBySubjectName" storeName="TrustedPeople"/> 
       </serviceCertificate> 
      </clientCredentials> 
     </behavior> 
    </endpointBehaviors> 
</behaviors> 

Configurar que el punto final a utilizar este comportamiento.Unas pocas notas:

  • cliente-CN es un nombre que se genera el certificado de cliente para la (no tan importante)
  • servidor-CN es un nombre que se genera el certificado de servidor para (por lo general el nombre DNS del servidor)

Este es un tema muy complejo y siempre requiere mucho tiempo para investigar. Revise este artículo http://blogs.msdn.com/b/imayak/archive/2008/09/12/wcf-2-way-ssl-security-using-certificates.aspx Espero que esta ayuda.

Cuestiones relacionadas