我想验证远程 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") {//确定}
有人可以“修改”我的 .exe 中的字符串以将 MYSAFEURL 更改为 whatever.com
那么有什么方法可以100%确定证书是真的吗?
最佳答案
您可以在 URL 上签名
if((Hash(Certificate.URL) = Decrypt("UrlSignature")) {//OK}
With "UrlSignature" = Encrypt(Hash("MYSAFEURL.COM"))
哈希可以是 SHA256
加密和解密是类似RSA的非对称加密
你用私钥加密
你用公钥解密
关于c# - 如何验证远程 ssl 证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13513379/