Re: Problems with ServerCertificateValidationCallback
Ryan Heath <[email protected]> Mon, 23 Nov 2009 08:50:13 +0100
| Newsgroups | gmane.comp.windows.devel.dotnet.advanced |
|---|---|
| Message-ID | <[email protected]> |
Just a uneducated guess: what happens when you set ServicePointManager.ServerCertificateValidationCallback = this.ValidateServerCertificate; before the HttpWebRequest httpWebRequest = (HttpWebRequest) WebRequest.Create(url.ToString()); ? From your explanation is seems possible that the callback is set for the next webrequest.create? // Ryan On Sun, Nov 22, 2009 at 11:42 PM, Dean Cleaver < [email protected]> wrote: > No - that's what I mean by the callback failing - it doesn't get called. > > I have a sample where I'm hitting a page on my server. I click the button, > the callback is called, and then it exits the test function. I click the > button again, and it exits the test function without hitting the > ValidateServerCertificate. > > I've tried almost every option for CachePolicy I can see (BypassCache, > Reload, NoCacheNoStore) and I still get the same behaviour - it skips the > certificate validation on subsequent calls, however in the case of my real > application where it's testing multiple sites in multiple threads, it skips > one or 2 at random, even on the first call to the server. > > Dino > > -----Original Message----- > From: Discussion of advanced .NET topics. [mailto: > [email protected]] On Behalf Of John Warner > Sent: Monday, 23 November 2009 11:13 a.m. > To: [email protected] > Subject: Re: [ADVANCED-DOTNET] Problems with > ServerCertificateValidationCallback > > Does ValidateServerCertificate get called when the callback fails? > > John Warner > > > > -----Original Message----- > > From: Discussion of advanced .NET topics. [mailto:ADVANCED- > > [email protected]] On Behalf Of Dean Cleaver > > Sent: Sunday, November 22, 2009 4:47 PM > > To: [email protected] > > Subject: [ADVANCED-DOTNET] Problems with > > ServerCertificateValidationCallback > > > > I'm using the below code (trimmed a bit of unimportant stuff out) to > check a > > given page on a site, and validate the server certificates. However, it > seems to > > not call the callback at all for some sites, despite the url being > https, and > > manual checking of the site indicates a valid certificate. > > > > I'm using an instance level function and a mutex so I can ensure that > I'm > > checking one at a time. I've even stepped through the code, and the > callback > > just doesn't get called for some sites. > > > > Any ideas why? > > > > Dino > > > > > > private bool checkedCertificate; > > public void RunTest(object url) > > { > > Mutex mutex = new Mutex(false, "WebsiteLock"); > > mutex.WaitOne(); > > > > try > > { > > HttpWebRequest httpWebRequest = (HttpWebRequest) > > WebRequest.Create(url.ToString()); > > ServicePointManager.ServerCertificateValidationCallback > = > > this.ValidateServerCertificate; > > > > checkedCertificate = false; > > > > HttpWebResponse httpWebResponse = (HttpWebResponse) > > httpWebRequest.GetResponse(); > > } > > finally > > { > > mutex.ReleaseMutex(); > > } > > } > > > > public bool ValidateServerCertificate( > > object sender, > > X509Certificate certificate, > > X509Chain chain, > > SslPolicyErrors sslPolicyErrors) > > { > > checkedCertificate = true; > > > > // Allow this client to communicate with unauthenticated > servers > > return true; > > } > > } > > } > > > > =================================== > > View archives and manage your subscription(s) at > > http://peach.ease.lsoft.com/archives > > =================================== > View archives and manage your subscription(s) at > http://peach.ease.lsoft.com/archives > > =================================== > View archives and manage your subscription(s) at > http://peach.ease.lsoft.com/archives > =================================== View archives and manage your subscription(s) at http://peach.ease.lsoft.com/archives