HttpWebRequest para SSL falhar
-
04-07-2019 - |
Pergunta
Eu estou usando este código, para fazer um pedido para uma determinada URL:
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;
}
Eu estou usando-o para testar a stickyness de uma carga de trabalho Balancer, com 3 servidores por trás dele. Todos eles têm um arquivo HTM estática chamada sid.htm, onde o servidor do Servidor ID está escrito.
Para URL de HTTP com isso funciona bem. Mas com HTTPS não funciona. Eu recebo esta exceção:
A solicitação foi anulada:. Não foi possível criar SSL / TLS canal seguro
No momento, tenho apenas 2 servidores atrás do WLB e um no seu próprio com um IP público por trás de um firewall. HTTPS solicitações funciona bem se eu acertar o servidor autônomo -. Mas quando eu bati o WLB eu recebo o erro acima
Uma coisa: Para alternar entre bater o único servidor, e o WLB eu uso o meu arquivo hosts. O DNS registra para o meu domínio aponta para o único servidor no momento. Então eu coloquei um registro no meu arquivo hosts para acertar o WLB. Isso não deve ser causando problemas ...
A minha pergunta ??strong>: credenciais que SSL / certificados faz o uso HttpWebRequest? Se ele usa 40 bits DES ou 56 bits DES, que é a razão, porque aqueles são desativados no WLB. Mas esses certificados não foram utilizados em navegadores desde IE3 e Netscape 1 e 2.
Solução
Ele funciona perfeitamente no meu navegador.
Eu encontrei a solução 1 minuto depois que eu postei a pergunta:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
E isso significa o HttpWebRequest estava usando TLS 1.0 - Eu não sei, mas eu supor que é de 40 bits DES ou 56 bits DES, que está desativado no WLB
.Outras dicas
Não é smothing você pode querer considerar com o balanceador de carga. As que usamos para a frente o tráfego HTTPS segura aos servidores por trás dele em uma conexão HTTP inseguro. A conexão entre o balanceador de carga e o navegador ainda é seguro, mas não há nenhuma necessidade para a cabeça sobre o protocolo seguro entre o balanceador e os servidores web.
Nós queria para detectar uma conexão segura em nossos servidores da web, mas, inicialmente, nunca vi uma conexão HTTPS. Foi quando percebemos que o tráfego atrás do balanceador era inseguro. Fazia sentido, uma vez que sabia.
O que fazemos agora é para a frente todo o tráfego seguro entrando no balanceador (porta 443) para a porta 81 (altenative HTTP) e, em seguida, encaminhado todo o tráfego HTTP normal (portas 80 e 81) a porta 80. Em seguida, podemos verificar a porta no servidor web e saber 80 é inseguro e 81 é proteger o tráfego entre o navegador e balanceador apesar do fato de todos os seus HTTP no servidor web.