Question

J'utilise ce code pour effectuer une demande sur une URL donnée:

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;
}

Je l’utilise pour tester l’adhérence d’un équilibreur de charge de travail, avec 3 serveurs derrière. Ils ont tous un fichier HTM statique appelé sid.htm, où l’ID du serveur est écrit.

Pour les URL avec HTTP, cela fonctionne bien. Mais avec HTTPS, cela ne fonctionne pas. Je reçois cette exception:

  

La demande a été abandonnée: impossible de créer un canal sécurisé SSL / TLS.

Pour le moment, je n'ai que 2 serveurs derrière la WLB et un seul avec une adresse IP publique derrière un pare-feu. Les requêtes HTTPS fonctionnent bien si je frappe le serveur autonome - mais quand je frappe le WLB, j'obtiens l'erreur ci-dessus.

Une chose: pour pouvoir basculer entre le serveur unique et le serveur WLB, j'utilise mon fichier hosts. Les enregistrements DNS de mon domaine pointent vers le serveur unique pour le moment. J'ai donc mis un enregistrement dans mon fichier hosts pour atteindre la WLB. Cela ne devrait pas causer de problèmes ...

Ma question : Quels sont les identifiants / certificats SSL utilisés par HttpWebRequest? S'il utilise DES 40 bits ou DES 56 bits, c'est la raison, car ceux-ci sont désactivés dans la WLB. Mais ces certificats ne sont plus utilisés dans les navigateurs depuis IE3 et Netscape 1 et 2.

Était-ce utile?

La solution

Cela fonctionne parfaitement dans mon navigateur.

J'ai trouvé la solution une minute après avoir posté la question:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;

Et cela signifie que HttpWebRequest utilisait TLS 1.0 - je ne sais pas, mais je suppose qu'il s'agit d'un DES 40 bits ou d'un DES 56 bits, qui est désactivé dans le WLB.

Autres conseils

Il est peu probable que vous souhaitiez prendre en compte l'équilibreur de charge. Ceux que nous utilisons transmettent le trafic sécurisé HTTPS aux serveurs situés derrière lui sur une connexion HTTP non sécurisée. La connexion entre l’équilibreur de charge et le navigateur est toujours sécurisée, mais le protocole sécurisé entre le répartiteur et les serveurs Web n’est pas nécessaire.

Nous voulions détecter une connexion sécurisée sur nos serveurs Web, mais nous n'avions au départ jamais vu de connexion HTTPS. C'est à ce moment-là que nous avons réalisé que le trafic derrière l'équilibreur était peu sécurisé. Fait sens une fois que nous avons su.

Ce que nous faisons maintenant consiste à transférer tout le trafic sécurisé entrant dans l'équilibreur (port 443) vers le port 81 (HTTP atténué), puis à transférer tout le trafic HTTP normal (ports 80 et 81) vers le port 80. Ensuite, nous pouvons vérifier la Port sur le serveur Web et sachez que 80 n’est pas sécurisé et 81 qu’il s’agit d’un trafic sécurisé entre le navigateur et l’équilibreur, alors que le protocole HTTP est entièrement au serveur Web.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top