WCF y Balanceadores de Carga F5 Big IP

|

Como ultimamente sucede ando haciendo servicios Web, y me encanta WCF para hacerlo por muchas razones, en especial la rapidez con la que uno puede hacer cosas complejas, y como era de esperarse en una de las implementaciones que hice por el crecimiento que tienen, cambiaron sus balanceadores de carga de software por "cajas" F5 Big IP estas definitivamente son muy buenas para distribuir la carga y bajar el procesamiento de los servidores, por que entre otras cosas mas que balancear carga, se pueden encargar del procesamiento SSL, y por su puesto esto es un alivio para los servidores! Pero no para los servicios WCF que usan credenciales en el mensaje...
Resulta que como el F5 se encarga del procesamiento SSL, cuando el trafico es pasado al servidor de turno este pasa plano, claro para apliaciones web es facil configurar para que se reciba el trafico plano, de hecho en ciertos casos no hay que hacer nada, pero si usas un servicio WCF con credenciales en el mensaje, por restricciones de seguridad TIENES QUE USAR SEGURIDAD EN EL TRANSPORTE, esto significa encriptar la comunicación con SSL, no hay otra forma, o incurrir en otras practicas no recomendadas como pasar las credenciales como parametros de los mensajes (no hagan esto nunca!) y demas...

Uno puede notar el problema cuando claro ya configurado el F5 y apuntas a tu servicio con Seguiridad en el Transporte y Credenciales en el Mensaje, el trafico pasa y en el servidor donde se ejecuta el servicio te dicen que no pueden validar los mensajes que llegan, y de vuelta tambien tienes el mismo resultado, Faults diciendo que la seguridad no puede ser verificada, ok si tienes estos mensajes tienes el problema...

Hay 2 soluciones, la primera implementar un canal Http que permite que se pasen las credenciales en el mensaje sin seguridad en el transporte, eso puedes encontrar como hacerlo aca: http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/87a254c8-e9d1-4d4c-8f62-54eae497423f/, pero la verdad no les recomiendo esto, revise un poco profundamente y hay ciertos casos en que no funciona completamente, y ademas es un poco complicado, ademas una advertencia es que si haces esto los mensajes pasan planos por la red y pueden ser vistos facilmente con un sniffer bien ubicado en la red...

La otra opcion antes no era posible, pero ahora si, antes los F5 no podian pasar el trafico SSL al servidor, solo podian pasarlo plano, gracias al soporte de F5 se nos indico que hoy ya se puede hacerlo, les sugiero que para los pasos exactos contacten al soporte de F5, los pasos basicos y no detallados en resumen son estos:

1.- Crear un virtual server en el puerto 443 y a el asociar un Profile SSL Server
2.- Crear un pool en el puerto 443 y poner como member server el servidor
3.- Dividir el certificado a usar en 2, 1 es el certificado y otro es la clave, subirlo al F5 a las ubicaciones correspondientes para cada tipo
4.- Crear un SSL Proxy, usando el certificado y la clave que se subio anteriormente
5.- Configurar a que apunte a los servidores correctos

Estos son pasos con mucha falta de detalle, yo insisto en que consulten a su soporte F5 para los pasos detallados, la consulta es como hacer un Servidor SSL de Cliente, para que el servidor reciba el trafico SSL.

Espero les sirva!