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