2011-05-23 22 views
7

OK Probablemente estoy yendo demasiado lejos en las malas hierbas con mi configuración WCF y no puedo ver el bosque a través de los árboles, así que quiero un punto de control en seguridad.¿Se necesita SSL para WCF al usar Transport Security?

Tengo (2) enlaces expuestos en un servicio WCF para opciones del lado del cliente que consumen: netTcpBinding y wsHttpBinding (tanto fino como funcional). He configurado ambos con el valor predeterminado: clientCredentialType = "Windows". Tengo el wsHttpBinding configurado para usar un certificado SSL y exponer el punto final a través de https (lo quiero), y también tengo un certificado SSL configurado para que netTcpBinding use SSL sobre TCP (también quiero esto).

Aquí es donde sigo obteniendo información mixta. Aparentemente, la seguridad de "Transporte" es inherentemente segura. ¿Significa esto que hago no necesito un certificado SSL, entonces si quiero asegurar la capa de Transporte?

Respuesta

8

Tuve que leer mucho entre varios artículos para obtener los detalles que estaba buscando de mi publicación original. La información que ayudó a aclarar un poco para mí fue la siguiente:

Cada protocolo (TCP, HTTP, MSMQ, NamedPipes) tiene su propio mecanismo para pasar credenciales y gestionar la protección de mensajes.

arriba es de la WCFSecurityGuide

Viniendo de un fondo de web principalmente Tengo una muy buena comprensión de HTTP y asegurándola con un certificado SSL. Sin embargo, este procedimiento exacto no es necesario en un entorno de Windows para net.tcp que utiliza su propio método en Windows para proteger la capa de transporte.

Así que cuando se pone a fin de cuentas, aquí están los (2) explinations en lo que respecta a asegurar un enlace HTTP y net.tcp en un entorno Windows que quería entender:

Para net.tcp:el servicio y los clientes se autentican utilizando la autenticación de Windows, y los mensajes son protegidos en el nivel de transporte por la seguridad de Windows

Para un enlace HTTP (es decir wsHttpBinding):al utilizar enlaces HTTP, la seguridad del transporte es provisto por SSL . El certificado SSL se utiliza para proporcionar la protección del mensaje.

así que voy a no necesita un certificado SSL para la unión como que es manejado por seguridad de Windows y se inheriently seguro cuando se utiliza seguridad Transporte net.tcp. Cuando use un wsHttpBinding, igual tendré que asegurar el Transporte con un certificado SSL que había hecho como se mencionó anteriormente, y expuse el enlace a través de HTTPS.

Si alguno de los lectores futuros tienen preguntas similares el enlace guía WCF I publicado y el enlace a continuación son un buen punto de partida:

Escenarios

Común WCF seguridad:
http://msdn.microsoft.com/en-us/library/ms730301.aspx

+1

¡Buen resumen! Para que quede claro, la "protección de mensajes" para esta configuración significa que se establece un canal encriptado (el transporte) a través del cual el mensaje se transmite al servicio. El mensaje en sí no está ** encriptado ** y no necesita ser porque el canal es seguro. WCF también tiene seguridad de nivel de mensaje (que ** no ** está habilitada en esta configuración) que encripta el mensaje en sí mismo para que pueda transmitirse a través de canales no seguros o pasar a través de intermediarios comprometiendo el contenido del mensaje. –

+0

¡Gracias! Información del WCFSecurityGuid (p.127) para obtener más información sobre los modos de seguridad y su descripción: ** Ninguno **: no se proporciona seguridad; no deberías usar esta opción ** Transporte **: la autenticación mutua y la protección de mensajes se proporcionan en el nivel de transporte. ** Mensaje **: la autenticación mutua y la protección de mensajes se proporcionan a nivel de mensaje. ** Ambos **: la autenticación mutua y la protección de mensajes se proporcionan tanto a nivel de transporte como a nivel de mensaje. Esto es mucho más de lo que se necesita para la mayoría de los escenarios. – atconway

+0

cont ... ** TransportWithMessageCredential **: la autenticación del cliente se proporciona en el nivel del mensaje, y la protección del mensaje y la autenticación del servicio se proporcionan en el nivel de transporte. ** TransportCredentialOnly **: la autenticación mutua se proporciona en el nivel de transporte, pero no se proporciona protección de mensajes. – atconway

2

En esta configuración, la seguridad de "Transporte" es la forma en que le dice a WCF que realmente quiere que use SSL. Para que SSL funcione, necesita un certificado de servidor que el cliente pueda verificar (ya sea desde una autoridad de firma o autofirmada que instale en el cliente).

Así que lo tienes bien. :)

+0

Gracias por la respuesta, Lo aprecio. Todavía estoy un poco confundido (leí tu respuesta varias veces); entonces, al estar en lo correcto, ¿no necesito * un certificado SSL porque es inherentemente seguro o lo necesito? Estoy tratando de rastrear un buen artículo de MSDN (tengo alrededor de 10 abiertos ahora) tratando de explicar la seguridad del transporte y su relación con SSL para la seguridad en un entorno de instalación de credenciales de Windows. Creo que tengo todos los enlaces, todavía estoy tratando de entender si la aplicación de SSL (cuando se desea seguridad) tiene sentido con mi configuración. ¡Gracias! – atconway

+0

Creo que estoy bastante claro en el wsHttpBinding. Para asegurar el transporte, debe usar un certificado SSL configurado para exponer el enlace a través de https. Hecho. Y si esto se puede confirmar, estoy bien con eso. Donde todavía estoy confundido es con el enlace net.tcp. El SO ofrece algunos lugares donde he leído la seguridad de este enlace (la seguridad para el modo de transporte se proporciona implementando Seguridad de la capa de transporte (TLS) sobre TCP. La implementación TLS es proporcionada por el sistema operativo), y otros dicen: para TCP, es SSL sobre TCP o Windows. Así que todavía hay algo de confusión en el enlace net.tcp. – atconway

+2

Necesita un certificado de servidor para poder usar SSL. El certificado es la forma en que los clientes saben que el mensaje que reciben del servidor es REALMENTE del servidor y no fue interceptado y modificado durante el tránsito. net.tcp está utilizando TLS como se describe [aquí] (http://msdn.microsoft.com/en-us/library/ms733089.aspx). – Tridus

Cuestiones relacionadas