【问题标题】:Best way to handle self signed certificates处理自签名证书的最佳方式
【发布时间】:2017-06-12 18:41:21
【问题描述】:

我最近遇到了一个问题,我试图从网站获取资源。该站点已与自签名证书相关联。当我通过 WebRequest 请求资源时,它会抛出以下错误:

无法为 SSL/TLS 安全通道建立信任关系

我确实在寻找解决方案。我不想完全禁用检查证书。简而言之,我无法找到令人信服的答案。请告诉我处理自签名证书的最佳方式。

【问题讨论】:

  • 该错误意味着底层 TCP 客户端无法验证服务器的真实性。执行此操作的方法有多种,涉及证书配置。例如,将自签名证书加载到您的个人存储中以使用对等信任验证。
  • 你能解释一下吗?
  • 在典型场景中,启用 TLS 后,服务器会在建立安全连接之前的握手过程中向客户端提供证书。该证书允许客户端在客户端接受连接并将潜在的敏感信息发送到服务器之前以加密方式验证服务器是真实的(以防止欺骗)。您可以自行决定跳过(不推荐)客户端中的此服务器验证。
  • 有没有办法让它接受自签名证书?我不想跳过验证。
  • 您可以将服务器证书安装到您的个人存储中。尝试搜索访问 Windows 证书存储以及如何配置对等信任验证的示例。你应该不需要再写代码了。

标签: c# httpwebrequest webrequest self-signed


【解决方案1】:

首先,重要的是要知道,此异常通过检查站点证书信任来阻止您访问可能的假 Web 服务器。

自签名证书是可以信任的,但您必须安装它的根 CA 到系统 受信任的 CA 存储

如果您坚持信任由自签名证书签名的服务器而不将其根 ca 安装到受信任的 CA 存储中,您可以强制检查机制通过以下方式信任任何内容:

ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

或更好的方法将此强制信任仅设置为 HttpWebRequest 实例:

var request = (HttpWebRequest)HttpWebRequest.Create(myUri);
request.ServerCertificateValidationCallback = delegate { return true; };

【讨论】:

  • 我正在使用 ASP .NET 4.0。我不认为我能做到这一点。 request.ServerCertificateValidationCallback = 委托 { 返回真; };
猜你喜欢
  • 1970-01-01
  • 2020-09-15
  • 1970-01-01
  • 1970-01-01
  • 2017-02-25
  • 2016-11-14
  • 2021-07-28
  • 1970-01-01
  • 2016-05-20
相关资源
最近更新 更多