Domanda

Sto usando questo codice per fare una richiesta a un determinato 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;
}

Lo sto usando per testare l'adesività di un Work Load Balancer, con 3 server dietro. Hanno tutti un file HTM statico chiamato sid.htm, in cui è scritto l'ID server del server.

Per gli URL con HTTP funziona bene. Ma con HTTPS non funziona. Ottengo questa eccezione:

  

La richiesta è stata interrotta: impossibile creare il canale sicuro SSL / TLS.

Al momento, ho solo 2 server dietro il WLB e uno da solo con un IP pubblico dietro un firewall. Le richieste HTTPS funzionano correttamente se colpisco il server autonomo, ma quando accedo al WLB ottengo l'errore sopra riportato.

Una cosa: per passare dal colpire il singolo server al WLB, uso il mio file hosts. I record DNS per il mio dominio puntano al singolo server al momento. Quindi ho messo un record nel mio file hosts per colpire il WLB. Questo non dovrebbe causare problemi ...

La mia domanda : quali credenziali / certificati SSL utilizza HttpWebRequest? Se utilizza DES a 40 bit o DES a 56 bit, questo è il motivo, perché quelli sono disabilitati nel WLB. Ma quei certificati non sono stati usati nei browser da IE3 e Netscape 1 e 2.

È stato utile?

Soluzione

Funziona perfettamente nel mio browser.

Ho trovato la soluzione 1 minuto dopo aver pubblicato la domanda:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;

Ciò significa che HttpWebRequest utilizzava TLS 1.0: non lo so, ma suppongo che sia DES a 40 bit o DES a 56 bit, disabilitato nel WLB.

Altri suggerimenti

C'è qualcosa che potresti voler considerare con il bilanciamento del carico. Quelli che usiamo inoltrano il traffico sicuro HTTPS ai server dietro di esso su una connessione HTTP non sicura. La connessione tra il bilanciamento del carico e il browser è ancora sicura, ma non è necessario il sovraccarico del protocollo sicuro tra il bilanciamento e i server Web.

Volevamo rilevare una connessione sicura sui nostri server Web ma inizialmente non abbiamo mai visto una connessione HTTPS. In quel momento ci siamo resi conto che il traffico dietro il bilanciamento era tutto insicuro. Aveva senso una volta che lo sapevamo.

Quello che facciamo ora è inoltrare tutto il traffico sicuro che arriva al bilanciatore (porta 443) alla porta 81 (HTTP alternativo) e quindi inoltrare tutto il normale traffico HTTP (porte 80 e 81) alla porta 80. Quindi possiamo controllare il porta sul server Web e sa che 80 non è sicuro e 81 è un traffico sicuro tra browser e bilanciamento, nonostante sia tutto HTTP sul server Web.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top