【问题标题】:Make C# application trust SSL certificate使 C# 应用程序信任 SSL 证书
【发布时间】:2018-11-15 15:43:06
【问题描述】:

我正在尝试通过 HttpClient 类执行 HTTPS 获取请求。但是,由于提供的证书不受信任,因此在尝试执行请求时会引发异常。

我可以访问 SSL 私钥,但问题是如何将私钥安装到应用程序中,以便它可以从网站解密公钥?

HttpClient httpClient = new HttpClient();
httpClient.BaseAddress = new Uri("https://siteUsingSSL.com/");

var response = await httpClient.GetAsync("swagger/index.html");

Console.WriteLine(response.StatusCode);

【问题讨论】:

  • 是否可以选择在机器上安装受信任的证书?
  • “抛出异常” 请在您的问题中包含确切的异常,因为它会影响答案。您是否收到诸如“无法建立信任关系”、“无法根据验证过程验证证书”之类的错误,或者只是一个简单的 HTTP 401/403 状态?
  • 提议的 dup 是一个非常糟糕的选择,这个问题是关于 iOS 的,而答案是 Xamarin 特有的。

标签: c# .net ssl openssl-net


【解决方案1】:

要进行自定义 TLS/SSL 证书验证,请使用 ServicePointManager.ServerCertificateValidationCallback 回调。在回调中,您可以根据您喜欢的任何逻辑返回 true 或 false。

我可以访问 SSL 私钥,但问题是如何将私钥安装到应用程序中,以便它可以从网站解密公钥?

绝对。私钥永远不能离开网站。此外,证书中没有可解密的内容。证书使用私钥签名,并且签名的验证需要嵌入在证书中的public 密钥。您收到的证书肯定是有效,否则整个 SSL/TLS 握手将失败。

您需要确定的是您是否信任您收到的证书。

一个简单的解决方案是在代码中硬编码证书属性(例如指纹),然后验证收到的证书的指纹。但是,一旦您需要更改站点证书,这样的验证就会被证明是不好的。

另一个简单的解决方案是验证证书颁发机构,但随后任何人都可以创建自签名证书并伪造您期望的颁发机构。

到目前为止,最好的解决方案是为您的网站使用受信任的证书。自从letsencrypt.org 可用以来,真的没有理由不在您的网站上拥有受信任的证书。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-09
    • 2023-04-07
    相关资源
    最近更新 更多