我的问题的灵感来自阅读OWASP.org上的证书和公钥固定。
使用ServicePointManager.ServerCertificateValidationCallback
时,是否显示以下代码来固定公钥:
public static bool PinPublicKey(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
if (null == certificate)
return false;
String pk = certificate.GetPublicKeyString();
if (pk.Equals(PUB_KEY))
return true;
// Bad dog
return false;
}
据我所知,回调是开发人员覆盖.NET内置的默认验证的一种方式。如果公钥匹配,则上面的代码返回TRUE。但是,如果存在SSL错误(在sslPolicyErrors
参数中)会怎么样?在这种情况下,回调是否应该返回FALSE?
我认为如果没有检测到其他错误,钉扎部分应该是一个额外的检查。否则,我可能会使用匹配的公钥创建恶意证书并欺骗客户端。