c# - 如何验证远程 ssl 证书?

标签 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));

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

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

虚拟代码:

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/

相关文章:

python ftplib 和 TLS,数据连接问题

python-3.x - Python SSL - 当数据大于 1400 时 recv 被偏移

azure - 使用 Azure 设备预配服务的 REST API 注册设备?

c# - 无法跟踪实体类型 'x' 的实例,因为已在跟踪键值为 '{Id: 6}' 的另一个实例

c# - WPF 应用程序广泛捕获关键的上/下事件

c# - 如何在 XML 序列化后没有列表元素的包装器元素

c# - 通过代码访问时私钥为空,为什么?

c# - 在 asp.net mvc 4 razor 中上传文件

Wordpress www 到非 www 域迁移

javascript - 如何在 Node.js Web 应用程序中访问原始(或完整)X509 证书