在.NET Core 2.1中,您可以设置RemoteCertificateValidationCallback
处理程序以验证服务器的TLS证书。回调签名为documented,但不清楚如何使用它。有一个SslPolicyErrors
枚举提供了一些一些潜在验证错误的值,但不是全部。例如,如果证书过期,将发生什么错误?另外,默认实现还会执行哪些其他检查,当我使用回调时它们是否仍然适用?
我想通过两种方式更改验证:
如果证书通常是有效的,我想将证书,任何链或CA证书限制为指定的哈希。因此,我可以限制服务器使用的证书或CA。在这种情况下,将检测到SSL代理。
如果证书或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可能不再适用,甚至可能不存在。完成基本操作后,我将不得不玩更多游戏。