seguridad - web service authentication c# example
Cifrado en C-Web-Services (6)
Estoy buscando una manera simple de cifrar mi comunicación jabón en mi C-Web-Service.
Estuve investigando WSE 3.0 pero parece que Microsoft dejó de admitirlo y, por lo tanto, no es fácil de usar.
Parece que WCF podría haber sido una opción, pero prefiero no actualizar desde .NET 2.0.
¿Algún método de encriptación simple y directo?
Creo que esto puede ayudar; el año pasado usamos esto para comprimir los servicios web y funcionó muy bien, creo que podría mejorarse con clases de cifrado;
Crear extensiones personalizadas de SOAP - Extensión de compresión
En realidad usamos WSE 3.0 en nuestros servicios web, que fueron desarrollados originalmente antes de WCF. Por seguridad, utilizamos un sistema SAML basado en token basado en las clases de Criptografía en System.Security.
Funciona muy bien. Sin embargo, este método no es de ninguna manera "simple".
Tal vez estoy siendo ingenuo, pero ¿sería aceptable forzar la comunicación a través de https? Desarrollo servicios web que se ejecutan en 2.0 y que han tenido éxito con solo lograr que IIS aplique https en el directorio virtual.
Alternativamente, o además, puede verificar la propiedad HttpRequest.IsSecureConnection .
Tal vez estoy siendo ingenuo, pero ¿sería aceptable forzar la comunicación a través de https? Desarrollo servicios web que se ejecutan en 2.0 y que han tenido éxito con solo lograr que IIS aplique https en el directorio virtual.
Esa sería la forma más sencilla de hacerlo, pero lamentablemente no tengo control sobre la configuración de IIS y no puedo garantizar que pueda ejecutar https.
En ese caso, tal vez la mejor opción sea cifrar caso por caso porciones de los mensajes SOAP (después de todo, es posible que no necesite cifrar el mensaje completo, ¿solo ciertos campos confidenciales?), O puede optar por usar un HttpModule para interceptar todos los mensajes y operar en los contenidos. En cualquier caso, es probable que deba proporcionar proxies personalizados.
Todo lo que haga para proporcionar "cifrado" que no use SSL / TLS es probable que sea vulnerable. Ahora tiene que preguntarse, ¿vale la pena quemar horas de desarrollo que podría estar gastando en características en una medida de seguridad de caucho y pollo? Tal vez lo sea
Las API .NET como DPAPI y la API Win32 crypt32 facilitan el cifrado de blobs de datos con claves estáticas. ¿Pero cómo van a recibir tus clientes las llaves? Cualquier cliente SOAP instalado tendrá que tener la clave grabada en su configuración, o recibirla en la insegura Internet.
Este es el problema que SSL / TLS resuelve para usted; el baile que haces con certificados TLS es lo que resuelve el problema de comunicar claves públicas sobre canales que no son de confianza.
Puede utilizar el cifrado de parámetros en C # utilizando la extensión System.Security.Cryptography.
Cifrar sus parámetros y descifrarlos sería más difícil pero mucho más seguro.
Cómo: cifrar y descifrar datos utilizando una clave simétrica (Rijndael) (C # / VB.NET)
Estoy usando este enfoque para un servicio web OTP (contraseña de un solo uso), y funciona bien para mí.