2008-10-09 374 views
6

¿Es posible tener seguridad de transporte sin autenticación? Soy muy consciente de sus defectos, pero no puedo instalar un certificado en el lado del cliente. Parece que puedo establecer WSHttpBinding.SecurityMode con el transporte y la ClientCredentialType a HttpClientCredentialType.None, pero cuando trato de llamar al servicio me sale esta excepción: Se produjoSeguridad de transporte WCF sin autenticación

un error al realizar la consulta HTTP para https://[MyService]. Esto podría deberse al hecho de que el certificado del servidor no está configurado correctamente con HTTP.SYS en el caso HTTPS. Esto también podría deberse a una falta de coincidencia del enlace de seguridad entre el cliente y el servidor.

No creo que sea una falta de correspondencia de seguridad entre el cliente y el servidor porque estoy usando un proxy generado por svcutil.

¿Por qué está buscando un certificado de servidor si configuré ClientCredentialType en None?

+0

Además de mi respuesta a continuación, existen otros obstáculos si confía en algo como un servidor ISA para realizar su cifrado HTTPS, en lugar del servidor IIS que aloja su servicio web. Si ese es su requisito, lo mejor sería plantear una nueva pregunta. –

Respuesta

6

Puede tener comunicación HTTPS sin autenticación, pero no puede tener comunicación HTTPS sin certificados, ya que el cifrado HTTPS usa certificados.

Hay algunas cosas para comprobar:

  1. ¿Se puede acceder al WSDL u otro recurso en el sitio a través de HTTPS en un navegador?
  2. ¿Recibes alguna advertencia sobre el certificado al hacerlo?

Si no puede acceder al WSDL u otro recurso en el sitio a través de HTTPS, entonces HTTPS no está configurado en el servidor.

Si recibe advertencias sobre el certificado, entonces no tiene un certificado en el que el cliente confíe. Aquí hay tres opciones; uno es obtener un certificado válido de algún lugar como Verisign que sea de confianza, el otro es instalar el certificado en una parte confiable de la tienda del usuario (que no puede hacer como lo mencionó), y el final es apagarlo la revocación del certificado en la configuración WCF del cliente.

+0

¿cómo desactivo la revocación del certificado en la configuración WCF del cliente? –

+2

Establezca el modo de revocación en Ninguno. – jezell

1

Lo que ha configurado parece correcto para lo que desea.

Creo que el problema se relaciona con la diferencia entre el certificado necesario para garantizar la seguridad del nivel de transporte (HTTPS) y cualquier certificado necesario para la autenticación.

Para realizar la seguridad del nivel de transporte, debe configurar un certificado para que el servidor IIS lo utilice para su cifrado. Esto de ninguna manera se usa para identificar a las partes en la comunicación de WCF, solo para asegurar la comunicación. (el certificado utilizado para este transporte HTTPS también se usa para identificar el servidor pero no está relacionado con la identidad de WCF)

Aquí hay un enlace a blog post que explica cómo configurar un certificado en IIS para este fin. No necesariamente lo mejor que Google tiene para ofrecer, solo el primero que encontré cubrió todos los puntos importantes. MSDN también debería cubrir esto en detalle.

+0

El certificado del servidor _se_utiliza para identificar el servidor para el cliente. Si el nombre común en el certificado no coincide con la URL a la que se está conectando el cliente, la acción predeterminada es abortar la conexión. –

+0

@JeremyWiebe Cheers - Quise decir fiestas en el contexto de la comunicación de WCF. Lo aclararé. –

0

Tuve el error que describes a pesar de que el modo de seguridad se configuró en transporte y el tipo de credencial del cliente se estableció en ninguno.

Esto se debió al hecho de que mis URL de servicio web habían sido creados por el Visual Studio     creador referencia de servicio 2010 como http://www.myservice.com:80/myservice.asmx con un puerto específico 80. Cuando cambié a este http://www.myservice.com/myservice.asmx la unión funcionado correctamente .

Cuestiones relacionadas