2009-04-23 21 views
6

Tengo una aplicación WCF cliente/servidor que necesita algún tipo de autenticación de usuario en una base de datos. La aplicación (tanto para el cliente como para el servidor) está siendo desarrollada para ser vendida a docenas de clientes, para ser utilizada en sus intranets. No estamos demasiado preocupados por encriptar la mayoría de los datos que se mueven a través del cable, excepto, por supuesto, durante la autenticación.WCF, Seguridad y Certificados

Pensando en la seguridad de WCF, sigo volviendo a la idea de que deberíamos hacer uso de los certificados x509. Sin embargo, nuestros clientes definitivamente no querrán saber acerca de ninguno de los detalles de tener que solicitar, comprar e instalar estos certificados.

Me gustaría saber en primer lugar cuál es el método preferido para implementar la autenticación de nombre de usuario/contraseña en este escenario. Si va a requerir el uso de certificados, ¿debe el cliente solicitar sus propios certificados de una CA de confianza, o podemos nosotros, como proveedor de software, generar certificados para que el cliente los use?

Realmente estoy buscando una mejor práctica, con la menor fricción para nuestros clientes.

Gracias!

Edit: Estoy usando NetTcpBinding, y mi servidor se está ejecutando como un servicio de Windows.

Respuesta

5

Por lo tanto, el nombre de usuario/contraseñas no requiere certificados del cliente, estoy seguro de que sabe que solo requiere un certificado HTTPS en el servidor que aloja el servicio WCF. Una vez que lo tenga, puede usar el nombre de usuario/contraseña estándar. bits de autenticación (WCF no permitirá la autenticación basada en mensajes sin HTTPS).

Si desea ver el origen del certificado del cliente, obtendrá la ventaja del no repudio: puede estar seguro de que el envío de la máquina es quien dice (a menos que alguien haya robado el certificado, que es menos probable que una combinación de nombre de usuario y contraseña yendo a pie). Usted, como proveedor de software, podría actuar como su propia autoridad de certificación y generar sus propios certificados de cliente (hay algunas maneras de hacerlo en función de su infraestructura), pero luego deberá configurar los clientes para que confíen en su CA raíz.

Si el servidor y el cliente se ejecutan en un entorno de dominio, puede usar transport security with Windows authentication (¡está utilizando el enlace tcp, así que la interoperabilidad está fuera de la ventana!) La ventaja adicional es que la autenticación es transparente y no Necesito certificados en cualquier lugar. Si desea la verificación de la identidad del servidor, entonces message security with Windows authentication hará el truco.

+0

Gracias! Algo que olvidé mencionar es que estoy usando NetTcpBinding. Además, recuerde que el servidor también se está implementando en varios clientes, que es la fuente principal de mi problema con respecto a los certs. – chris

+0

OK actualizó la respuesta – blowdart

1

Si va a cruzar los límites del cortafuegos, entonces los certificados serán su mejor solución. No sé mucho sobre los detalles sobre las aplicaciones para certificados o su aplicación. Lamentablemente, hasta donde yo sé, creo que tendrá que ayudarlos a solicitar certificados o tendrán que hacerlo ellos mismos a menos que quieran emprender en el proceso de instalación de su propio servidor de certificados. Si la aplicación será interna, entonces la autenticación de Windows funcionará y es MUY fácil, pero si crees que tendrás clientes que utilicen tu aplicación a través de los límites del firewall, entonces también podrías invertir el tiempo en usar certificados porque los certificados funcionarán en todas partes. Ahora hay algo llamado seguridad federada donde delega el permiso de autenticación a otra entidad. Creo que esto se usa, por ejemplo, si tiene dominios y desea delegar el permiso de alguien de otro dominio que no pertenece a su dominio pero es bastante complejo y mi comprensión es muy limitada, pero por el sonido de sus requisitos certificados es el camino a seguir.

de Seguridad no se supone que sea fácil :)

2

tengo proyecto en la producción, que es similar a su escenario. Tengo un servicio de Windows alojando puntos finales a través de netTCPBinding y utilicé x509 certs ... aunque en mi caso, la intención era encriptar tanto el transporte como las capas de mensaje, ya que estaba cruzando límites de seguridad no confiables. Me preocupaba menos proporcionar la autenticación/autorización que no fuera necesario que el certificado esté presente.

Al igual que en los escenarios de intranet (supongo), tenía autoridad sobre el servidor y las máquinas cliente en el momento de la instalación ... o al menos podría dictar algunos de los términos de la instalación.

En lugar de comprar los certificados x509 y cargar al cliente con ese gasto, opté por tirar el nuestro. Configuramos uno de nuestros servidores Win2003 para que sea una CA, emitiendo nuestro propio certificado de Autoridad de Certificación. Luego generamos un certificado x509 para el servidor, así como certificados x509 individuales para los clientes.

Los certificados de cliente y servidor se instalaron tanto en los clientes como en el servidor (según corresponda) en la tienda de usuario personal en el nivel de la computadora. También instalamos nuestro certificado de CA directamente en la sección Autoridades de certificación de raíz confiable, lo que hace que nuestros certificados de cliente y servidor sean confiables.

Porque estaba menos preocupado con la autenticación/autorización, no sé qué recomendar como una mejor práctica para tratar con certificadores vinculantes para usuarios individuales y más granular que a nivel de máquina (mi solución era Windows Service para Windows comunicación de servicio completamente desatendida). Creo que necesitaría un certificado para cada usuario, instalándolo en su tienda personal de usuarios en los certificados MMC. La implementación del tiempo de ejecución se guiará por la forma en que configure WCF para realizar la búsqueda de certificados, por lo que debería ser bastante fácil.

A lo largo del proceso, confié en gran medida en lo que había aprendido de este gran artículo de CodeProject: Securing WCF Services with Certificates. Lo guiará a través de la generación/instalación de los certs. La aplicación WCF de muestra está alojada en IIS, pero pude traducir fácilmente las secciones de configuración de web.config a app.config.

En mi caso, expuse la interfaz web para solicitar certificados en Win2003 a la propia web, por lo que el cliente podría solicitar certificados directamente en el futuro. Tenemos control de aprobación, por lo que funciona bien. Todavía no he tenido la necesidad de generar nuevos certs, así que no puedo decir cuánta fricción implicaría.

+0

Gracias por el enlace CodeProject. –

Cuestiones relacionadas