Ik probeer een website (site ja, niet service) aan te roepen met HttpWebRequest, maar ik krijg steeds een generieke exception met als melding:
"The request was aborted: Could not create SSL/TLS secure channel."
Het gaat om een https-website die in Opera gewoon te benaderen is. Gek eigenlijk, want Firefox geeft deze melding:
Wat heb ik al geprobeerd:
Het aanmaken van het HttpWebRequest is verder plain vanilla. Echt, echt, echt ECHT niets bijzonders aan:
De uri en de referer worden elders meegegeven, en zijn keurignette fully-qualified https-uri's. Vaak wordt trouwens aangeraden een proper certificaat voor de site te kopen. Niet echt een optie, want dit is een hobbyprojectje, en het is niet mijn website die ik benader.
Iemand een idee wat ik moet doen?
Ik gebruik overigens VS2008 en .NET 2.0, en dit is een console application.
"The request was aborted: Could not create SSL/TLS secure channel."
Het gaat om een https-website die in Opera gewoon te benaderen is. Gek eigenlijk, want Firefox geeft deze melding:
Prima, ik vertrouw de boel. Het is low-risk en http-zonder-s is niet beschikbaar. Dus ik kan en wil gewoon doorgaan. Maar in .NET lukt me dat niet....uses an invalid security certificate.
The certificate is not trusted because no issuer chain was provided.
(Error code: sec_error_unknown_issuer)
Wat heb ik al geprobeerd:
- request.ProtocolVersion = HttpVersion.Version10;
Dit helpt helemaal niets, ook al is de default versie 1.1. - Geen "Accept-Encoding: gzip,deflate" header meesturen. Standaard doe ik dat wel, omdat performance, maar weglaten helpt niet. Soort-van logisch, maar je weet maar nooit.
- De ServicePointManager africhten met onderstaand stuk code. Je zou zeggen dat hiermee alles valid is, maar nee. Sterker nog, die AlwaysGoodCertificate methode wordt niet eens aangeroepen
C#:
1
2
3
4
5
6
7
8
9
10
| private void TrustAnything() { ServicePointManager.Expect100Continue = true; ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls; ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(AlwaysGoodCertificate); ServicePointManager.CheckCertificateRevocationList = false; } private static bool AlwaysGoodCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; } |
Het aanmaken van het HttpWebRequest is verder plain vanilla. Echt, echt, echt ECHT niets bijzonders aan:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
| HttpWebRequest request = HttpWebRequest.Create(uri) as HttpWebRequest; request.Accept = "image/gif, image/png, image/jpeg, image/pjpeg, */*"; request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:14.0) Gecko/20100101 Firefox/14.0.1"; request.Referer = referer; request.Timeout = Timeout.Infinite; request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate"); try { response = request.GetResponse() as HttpWebResponse; } catch (WebException e) { response = e.Response as HttpWebResponse; } |
De uri en de referer worden elders meegegeven, en zijn keurignette fully-qualified https-uri's. Vaak wordt trouwens aangeraden een proper certificaat voor de site te kopen. Niet echt een optie, want dit is een hobbyprojectje, en het is niet mijn website die ik benader.
Iemand een idee wat ik moet doen?
Ik gebruik overigens VS2008 en .NET 2.0, en dit is een console application.
日本!🎌