1

我想验证远程 SSL 证书。

我有一个X509Certificate2实例并通过以下方式访问它:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://www.paypal.com/de/webapps/mpp/home");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
response.Close();
X509Certificate cert = request.ServicePoint.Certificate;
X509Certificate2 cert2 = new X509Certificate2(cert);
byte[] rawdata = cert2.RawData;
MessageBox.Show(cert2.GetNameInfo(X509NameType.EmailName,true));

但我现在怎么知道,这真的是我的证书?

那么我现在如何验证它?如果我做:

虚拟代码:

if(Certificate.URL = "MYSAFEURL.COM") {//OK}

有人可以“修改”我的 .exe 中的字符串以将 MYSAFEURL 更改为whatever.com

那么有什么方法可以100%确定证书是真的吗?

4

1 回答 1

0

您可以签署网址

 if((Hash(Certificate.URL) = Decrypt("UrlSignature")) {//OK}

With "UrlSignature" = Encrypt(Hash("MYSAFEURL.COM"))

哈希可以是 SHA256

加密和解密是像 RSA 一样的非对称加密

你用私钥加密

你用公钥解密

于 2015-09-16T13:34:17.787 回答