Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to call default ServerCertificateValidationCallback inside customized validation?

I want to modify .Net's default ServerCertificateValidationCallback to validate as true some of my company's certificates, but keeping the default validation for other certificates.

I can't seem to do this since the default ServerCertificateValidationCallback value is null.

ServicePointManager.ServerCertificateValidationCallback = 
(sender, certificate, chain, sslPolicyErrors) => 
 validCertificatesSerialNumbers.Contains(certificate.GetSerialNumberString()) ||    
 defaultlCallback.Invoke(sender, certificate, chain, sslPolicyErrors) //How do I set defaultCallback?
;

Thank you

like image 281
Joanvo Avatar asked Feb 23 '15 17:02

Joanvo


1 Answers

From what I can tell in the reference source this is where the callback comes into play:

if (ServicePointManager.ServerCertificateValidationCallback != null)
{
    useDefault = false;
    return ServicePointManager.ServerCertValidationCallback.
                               Invoke(m_Request,
                                      certificate,
                                      chain,
                                      sslPolicyErrors);
}

if (useDefault)
    return sslPolicyErrors == SslPolicyErrors.None;

Which means that the validation has already been performed and to know whether it passes you just need to check the sslPolicyErrors argument. You would do this:

ServicePointManager.ServerCertificateValidationCallback = 
(sender, certificate, chain, sslPolicyErrors) => 
validCertificatesSerialNumbers.Contains(certificate.GetSerialNumberString()) || (sslPolicyErrors == SslPolicyErrors.None);
like image 91
Mike Zboray Avatar answered Nov 10 '22 03:11

Mike Zboray