Pregunta

Estoy utilizando este código para realizar una solicitud a una URL determinada:

private static string GetWebRequestContent(string url)
{
  string sid = String.Empty;

  HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);
  req.KeepAlive = false;

  using (HttpWebResponse res = (HttpWebResponse)req.GetResponse())
  {
    using (StreamReader sr = new StreamReader(res.GetResponseStream()))
    {
      sid = sr.ReadToEnd().Trim();
    }
  }

  return sid;
}

Lo estoy usando para probar la adherencia de un Work Load Balancer, con 3 servidores detrás. Todos tienen un archivo HTM estático llamado sid.htm, donde se escribe la ID del servidor del servidor.

Para las URL con HTTP, esto funciona bien. Pero con HTTPS no funciona. Me sale esta excepción:

  

Se canceló la solicitud: no se pudo crear el canal seguro SSL / TLS.

En este momento, solo tengo 2 servidores detrás del WLB y uno solo con una IP pública detrás de un firewall. Las solicitudes HTTPS funcionan bien si encuentro el servidor independiente, pero cuando llego al WLB obtengo el error anterior.

Una cosa: para cambiar entre golpear el servidor único y el WLB, uso mi archivo de hosts. Los registros de DNS para mi dominio apuntan al servidor único en este momento. Así que puse un registro en mi archivo de hosts para golpear el WLB. Esto no debería estar causando problemas ...

Mi pregunta : ¿Qué credenciales / certificados SSL utiliza el HttpWebRequest? Si usa DES de 40 bits o DES de 56 bits, esa es la razón, porque están deshabilitados en el WLB. Pero esos certificados no se han utilizado en los navegadores desde IE3 y Netscape 1 y 2.

¿Fue útil?

Solución

Funciona perfectamente en mi navegador.

Encontré la solución 1 minuto después de que publiqué la pregunta:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;

Y eso significa que HttpWebRequest estaba usando TLS 1.0 - No lo sé, pero supongo que es un DES de 40 bits o un DES de 56 bits, que está deshabilitado en el WLB.

Otros consejos

Es posible que desee considerar el balanceador de carga. Los que utilizamos reenvían el tráfico seguro HTTPS a los servidores detrás de él en una conexión HTTP insegura. La conexión entre el equilibrador de carga y el navegador sigue siendo segura, pero no es necesario que exista un encabezado del protocolo seguro entre el equilibrador y los servidores web.

Queríamos detectar una conexión segura en nuestros servidores web, pero inicialmente nunca vimos una conexión HTTPS. Fue entonces cuando nos dimos cuenta de que el tráfico detrás del equilibrador era todo inseguro. Tenía sentido una vez que lo supimos.

Lo que hacemos ahora es reenviar todo el tráfico seguro que ingresa al balanceador (puerto 443) al puerto 81 (HTTP alternativo) y luego reenviar todo el tráfico HTTP normal (puertos 80 y 81) al puerto 80. Luego podemos verificar el el puerto en el servidor web y know 80 es inseguro y 81 es un tráfico seguro entre el navegador y el equilibrador a pesar del hecho de que todo es HTTP en el servidor web.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top