如何验证远程ssl证书?

时间:2012-11-22 13:06:33

标签: c# ssl x509certificate x509certificate2

我想验证远程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));

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

那我该如何验证呢? 如果我做:

Dummycode:

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

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

那么有没有办法100%确定证书是否真实?

1 个答案:

答案 0 :(得分:0)

您可以登录网址

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

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

哈希可以是SHA256

加密和解密是一种非对称加密,如RSA

您使用私钥进行加密

您使用公钥解密