RemoteCertificateValidationCallback用法

时间:2019-06-24 09:18:28

标签: c# security ssl

在.NET Core 2.1中,您可以设置RemoteCertificateValidationCallback处理程序以验证服务器的TLS证书。回调签名为documented,但不清楚如何使用它。有一个SslPolicyErrors枚举提供了一些一些潜在验证错误的值,但不是全部。例如,如果证书过期,将发生什么错误?另外,默认实现还会执行哪些其他检查,当我使用回调时它们是否仍然适用?

我想通过两种方式更改验证:

  1. 如果证书通常是有效的,我想将证书,任何链或CA证书限制为指定的哈希。因此,我可以限制服务器使用的证书或CA。在这种情况下,将检测到SSL代理。

  2. 如果证书或CA是自签名的,通常不会被接受,那么如果哈希匹配,我还是想接受它。在这种情况下,SslPolicyErrors可能带有None以外的其他值。

在任何情况下,证书名称和有效时间都必须正确。我不会覆盖这些。我这里只有一台Web服务器,其证书名称错误以进行测试(设置SslPolicyErrors.RemoteCertificateNameMismatch),但是没有一个带有过期证书的服务器。

这将在C#中完成吗?

这是裸露的骨架方法:

private bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
    return certificate.GetCertHashString(HashAlgorithmName.SHA256) == "12345...";
}

我不确定哈希算法。默认的SHA-1可能不再适用,甚至可能不存在。完成基本操作后,我将不得不玩更多游戏。

0 个答案:

没有答案