我的 Web 服务器使用的是自签名 SSL 证书。我可以通过自己实施验证检查来连接它:
private static Boolean ValidateCertificate(object sender,
X509Certificate certificate, X509Chain chain,
SslPolicyErrors sslpolicyerrors)
{
return certificate.GetCertHashString().equals("ABCDEF");
}
private void Connect(String requestUrl)
{
ServicePointManager.ServerCertificateValidationCallback = ValidateCertificate;
var request = (HttpWebRequest) WebRequest.Create(requestUrl);
var response = request.GetResponse();
//...
}
将返回的哈希GetCertHashString()
值与硬编码值进行比较以验证这确实是预期的证书是否安全?
“真实”证书是链的一部分,必须验证到根证书,该根证书是自签名的。我猜该根证书的可验证部分被硬编码到每个应用程序中。这使我相信我的自签名证书将与其他任何证书一样安全,只要硬编码值没有被篡改,这意味着可以访问机器本身,在这种情况下,标准根证书可能会被篡改也。那是对的吗?