2017-07-27 3 views
2

Je suis conscient qu'il ya des tonnes de questions et réponses sur StackOverflow et partout sur Internet avec exactement le même ou un message d'erreur très similaire et je suis sûr que j'ai lu et essayé 90% d'entre eux. Je n'arrive toujours pas à le réparer. Voici le code avec WebClient, comme suggéré par Visual Studio. Mais j'ai aussi essayé avec HttpWebRequest/WebRequest, malgré l'avertissement qu'il est obsolète. Pas de changement, j'ai eu la même erreur: "La demande a été annulée: Impossible de créer un canal sécurisé SSL/TLS".HTTPS sur proxy ne fonctionne pas

Maintenant, voici le code. makeProxy est vraiment juste 3 lignes, un nouveau WebProxy plus les informations d'identification pour cela. Je crois que cela fonctionne parce que (a) si je fournissais un mauvais identificateur là alors j'obtiens une erreur d'authentification, (b) si j'essaye d'aller à un http et pas une page de https, alors je le récupère, ainsi je suis dehors sur Internet.

protected string getToken() { 
    string url = ConfigurationManager.AppSettings["domo_api_url_auth"];  
    WebClient c = new WebClient(); 
    c.Proxy = makeProxy(); 
    c.Credentials = new NetworkCredential(ConfigurationManager.AppSettings["domo_api_cid"], ConfigurationManager.AppSettings["domo_api_pwd"]); 
    c.Encoding = System.Text.Encoding.UTF8; 

    ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3; 
    // ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; 
    // ServicePointManager.ServerCertificateValidationCallback += ValidateRemoteCertificate; 

    Stream responseStream = c.OpenRead(url); 
    return new StreamReader(responseStream).ReadToEnd(); 
} 

Mon problème est que le message n'est pas très utile. J'ai également essayé de le déboguer, n'a pas aidé. J'ai pensé au certificat sur le site du service Web que j'essaie d'atteindre et j'ai procédé à l'autorisation de ce certificat pour W3SVC. N'a pas aidé. Et je reçois la même erreur pour chaque site https, comme google.com ou stackoverflow.com ou le site Web de ma propre société. Mais quand je vais à un site de nouvelles au hasard avec http seulement, tout fonctionne bien. La chose extrêmement suspecte est que cela ne fonctionne pas même quand je décommente cette première ligne ServerCertificateValidationCallback, et quand je décommente le second, censé rediriger le code à la validation, il n'y arrive littéralement jamais. Comme la validation ne commencerait même pas.

Comment faire pour résoudre ce problème? Je ne comprends même pas sur quel point du processus de demande-réponse web il échoue.

+0

Essayez d'ajouter tous les drapeaux (y compris TLS) à ServicePointManager.SecurityProtocol. Si vous configurez Windows pour utiliser le proxy, HTTPS fonctionne-t-il dans un navigateur? - Si elle regarde le certificat et voir si c'est la légitimité délivrée au site ou un cert qui a été inséré par le serveur proxy. Vous pouvez obtenir des journaux très détaillés si vous activez le suivi: https://docs.microsoft.com/fr-fr/dotnet/framework/network-programming/how-to-configure-network-tracing –

+0

Oui, j'utilise le même proxy sur mon ordinateur portable (où je travaille également sur ce) et https fonctionne partout, tous les navigateurs, tous les sites. –

+0

Ah, je ne crois pas ça ... @AlexK. pourriez-vous ajouter ceci comme réponse? Je vais accepter comme une solution. –

Répondre

2

Vous devez probablement activer TLS en plus de SSLv3:

ServicePointManager.SecurityProtocol = 
    SecurityProtocolType.Ssl3 | 
    SecurityProtocolType.Tls | 
    SecurityProtocolType.Tls11 | 
    SecurityProtocolType.Tls12;