with httpclientcredentialtype clientcredentialtype clientcredentials clientcertificate wcf encryption certificate message

httpclientcredentialtype - Seguridad de mensajes WCF sin certificado y autenticación de windows



wcf with certificate authentication (5)

Bueno, con WCF podría usar la credencial de contraseña a nivel de mensaje y SSL a nivel de transporte, lo que creo que sería suficiente en su caso.

Ver here

Tengo un servicio WCF y un cliente que se implementará en varias compañías (cientos). Algunas compañías ejecutarán el software en su red y otras lo ejecutarán a través de Internet (servidor WCF en la oficina, cliente WCF en otra).

Queremos cifrar la comunicación entre el servidor WCF y el cliente. No tenemos ninguna necesidad de autenticar el cliente / suscriptor mediante la seguridad de WCF, porque tenemos nuestro propio nombre de usuario / contraseña de inicio de sesión que los clientes utilizarán para iniciar sesión en el servidor.

  • No podemos confiar en la autenticación de Windows porque algunos de los usuarios lo ejecutarán a través de Internet y es posible que el servidor WCF no esté en el mismo dominio que el cliente WCF.
  • Si usamos certificados "reales" *, las compañías que ejecutan el software tendrían que comprar certificados de una CA e instalarlo, y luego configurar nuestro software para usarlo, pero esto es demasiado complicado para la mayoría de ellos.
  • Podríamos crear certificados automáticamente durante la instalación del servidor WCF, pero luego tendríamos que instalarlo automáticamente en un almacén de certificados y de alguna manera otorgar automáticamente los permisos de IIS para leer el certificado. Esto es más complicado de lo que nos gustaría.

En resumen, queremos una solución simple donde el cifrado solo se basa en un secreto compartido, en nuestro caso, el nombre de usuario / contraseña con el que el usuario está iniciando sesión. Entiendo que esto no proporcionará el mejor cifrado disponible, pero estamos dispuestos a intercambiar parte de la seguridad para facilitar la implementación del software.

es posible?

* Con los certificados "reales", me refiero a los certificados comprados a una autoridad de certificación, y no a uno que yo mismo haya creado / autofirmado.



Hmm ... tal vez algo simple podría ser usado. Mueve el cifrado del software al hardware. VPN de cada red cliente a la suya y luego puede hacer lo que quiera para el transporte de WCF. La línea no es texto claro y el problema está resuelto.

Por supuesto, es más fácil decirlo que hacerlo, pero la mayoría de los proveedores de red proporcionan una configuración VPN bastante fácil y quizás sea más fácil que intentar desarrollar un instalador para certificados SSL y configurar el cliente.

¡Espero que ayude!


Para la seguridad de los mensajes, su cliente proporciona algunas credenciales y el servidor proporciona algunas credenciales. Para esta configuración y con su escenario, no podría utilizar el nombre de usuario y la contraseña del cliente con un Validador de nombre de usuario personalizado y un certificado de servidor para proporcionar las credenciales del servidor. Este Escenario de la aplicación proporciona una parte justa de la configuración de configuración que necesitaría para lograr esto, excepto las secciones de membresía de aspNet, que tendría que reemplazar con su configuración de validación personalizada.

Aún necesitaría certificados válidos en sus servidores (no se requieren certificados en los clientes), pero no puedo ver de ninguna manera.


Si desea cifrar los mensajes en el transporte (¡es una muy buena idea!), Debe haber algún conocimiento compartido entre el remitente (el cliente) y el servidor. Esto puede ser difícil de codificar, pero en realidad no es una buena idea: si ese conocimiento "compartido" se ve comprometido, un atacante podría descifrar y leer todos sus mensajes.

Además, dado que definitivamente no es una práctica recomendada, no hay ningún tipo de soporte en WCF para simplificar el uso de un secreto compartido. Estás solo, tienes que hacer tu propio 100% del camino.

La única forma viable de intercambiar de forma segura un secreto común es utilizar un certificado. No hay forma de evitar esto, lo siento. El certificado ni siquiera tiene que ser usado para la autenticación del usuario ni nada, pero establece un secreto compartido entre la persona que llama y el servicio y, por lo tanto, le permite cifrar los mensajes de tal manera que solo el destinatario deseado pueda descifrar y usar. ellos.

Por lo tanto, realmente no veo ninguna forma en que pueda tener certificados en sus servidores; no es necesario que esté en todos los clientes, sino en todos los servidores donde se ejecuta su servicio.

Bagazo

PD: si realmente quieres investigar el enfoque del "secreto compartido de código fijo", deberás pensar en esto:

  • ¿Cómo almacena un secreto compartido de forma segura en todos y cada uno de sus clientes?
  • ¿Cómo utiliza la información de ese secreto compartido almacenado para cifrar sus mensajes?

Típicamente, el enfoque sería doble:

  1. intercambiar alguna forma de un par de clave privada / pública; el servidor genera un par de claves y mantiene la clave privada para sí mismo y comparte la clave pública con el cliente (por ejemplo, a través de un mensaje WCF)
  2. al usar ese par de claves privada / pública, intercambie un secreto compartido común, por ejemplo, una "clave de cifrado" que cifrará simétricamente sus mensajes (y como es simétrico, el servidor puede usar la misma clave para descifrar los mensajes)
  3. configure la infraestructura en su cliente (por ejemplo, una extensión de WCF llamada comportamiento ) para inspeccionar el mensaje antes de que salga y cifrarlo con su secreto compartido

En definitiva, no es realmente trivial: no vale la pena llamarlo "seguridad" para nada más simple.

Si observa todo el trabajo que tendrá que hacer, ¿no sería más fácil utilizar los mecanismos de certificado integrados de WCF?

La seguridad digna vale su sal es difícil, así que, ¿por qué no aprovechar lo que está disponible en lugar de hacer todo el trabajo por usted mismo o, peor aún? Cree una solución a medias que es tan fácil de descifrar que podría enviar todo fácilmente en texto claro ... .. no subestime la complejidad y la cantidad de código necesaria para manejar incluso los escenarios de seguridad más básicos: WCF lo hace todo por usted, de forma gratuita y confiable y segura, ¡úselo! ¡No te arrepentirás!