我有一个C#应用程序(.Net Framework 4.7),它通过将证书的公共指纹(存储为代码中的常量)与X509Certificate.GetCertHashString()
返回的值进行比较来对SSL证书进行身份验证。
httpObj.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(ValidateCertificate);
...
private static bool ValidateCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
{
return certificate.GetCertHashString().ToLower() == HASH_CONSTANT;
}
我想知道推荐的做法是避免每次证书更新时都必须更新哈希字符串常量并重新发布应用程序。
This post建议更新证书后GetPublicKeyString
将返回相同的值,但是GetCertHashString
将返回新的证书哈希。
根据公钥而不是证书哈希进行身份验证是否有任何不利之处?
X509Certificate类中的另一个可能的候选者是GetSerialNumberString
。