У меня есть приложение C # (.Net Framework 4.7), которое проверяет подлинность SSL-сертификата, сравнивая открытый отпечаток сертификата (хранящийся в виде константы в коде) со значением, возвращаемым X509Certificate.GetCertHashString()
.
httpObj.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(ValidateCertificate);
...
private static bool ValidateCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
{
return certificate.GetCertHashString().ToLower() == HASH_CONSTANT;
}
Я хотел бы знать, что рекомендуется избегать обновления константы хэш-строки и повторного выпуска приложения при каждом обновлении сертификата.
Этот пост предлагает GetPublicKeyString
вернет то же значение после обновления сертификата, но GetCertHashString
вернет хэш нового сертификата.
Есть ли какие-либо недостатки в аутентификации на основе открытого ключа вместо хэша сертификата?
Другой возможный кандидат в классе X509Certificate - GetSerialNumberString
.