【问题标题】:Why wouldn't I be able to establish a trust relationship for a SSL/TLS channel?为什么我无法为 SSL/TLS 通道建立信任关系?
【发布时间】:2023-03-10 17:24:01
【问题描述】:

我有一段 .NET 代码在调用 HTTPWebRequest.GetRequestStream 时出错。这是错误消息:

底层连接已关闭: 无法建立信任关系 用于 SSL/TLS 安全通道。

我已经阅读了一些内容,表明我可能需要在运行代码的机器上获得证书,但我相信我拥有所有需要的证书...

这是我检查我是否拥有所需证书的方式:

  1. 使用 Firefox 访问网络服务。
  2. 查看正在使用的证书 通过查看来访问该 Web 服务 在安全信息通过 浏览器
  3. 导出证书
  4. 通过导入证书 控制面板中的 Internet 选项

这应该足够了吗?我仍然收到错误消息。

代码:

        var request = (HttpWebRequest)HttpWebRequest.Create(requestUrl); //my url
        request.Method = StringUtilities.ConvertToString(httpMethod); // Set the http method GET, POST, etc.

        if (postData != null)
        {
            request.ContentLength = postData.Length;
            request.ContentType = contentType;
            using (var dataStream = request.GetRequestStream())
            {
                dataStream.Write(postData, 0, postData.Length);
            }
        }

更新:

添加一些我的证书的屏幕截图。如果有任何问题,请告诉我:

首先,我们有 Firefox 使用的证书:

接下来,根据 MMC,我们有什么在我的受信任的根证书中:

最后,根据 MMC,我们有我的中级证书:

这看起来对吗?

【问题讨论】:

  • 如果您在 Fiddler 以 HTTPS 拦截模式运行时运行代码(工具 > Fiddler 选项 > HTTPS),问题会改变吗?
  • @Eric,没有。我刚试过,我得到了同样的错误

标签: .net asp.net security exception ssl-certificate


【解决方案1】:

如果使用自签名证书保护第 3 方网络服务,您需要将其 CA 签名证书安装到您的受信任证书密钥库中

根据代码示例进行编辑。

我已经尝试了一个示例,调用这些 facebook url 没有问题,使用下面的代码示例对 graph.facebook url 之一进行 http 获取没有错误。请您更新您的示例,使用您尝试发布的内容以及发布到哪个 URL?

目前从我的情况来看,它似乎可以工作,所以只能假设你正在执行它的电脑上存在证书问题。

    {
        string requestUrl = "https://graph.facebook.com/btaylor";

        var request = (HttpWebRequest)HttpWebRequest.Create(requestUrl); //my url
        request.Method = "GET";

        WebResponse response = request.GetResponse();

        Stream responseStream = response.GetResponseStream();
        // TODO: Do whatever you need with the response
        Byte[] myData = ReadFully(responseStream);
        string s = System.Text.ASCIIEncoding.ASCII.GetString(myData);
    }

【讨论】:

  • 如果您可以浏览到 Web 服务,您的浏览器应该会提示您证书不受信任,并允许您将其添加到受信任的证书中。
  • 你可以从控制面板 -> Internet 选项 -> 内容 -> 证书 -> 受信任的根证书
  • 好的,我尝试通过浏览器访问 Web 服务 (graph.facebook.com),但它只是将我重定向到 API 页面,而从未提及任何关于证书的内容。我确实在您提到的路径中有一堆证书,但没有一个说 facebook。它会说别的吗?
  • 另外,我在另一台机器上运行它并且它工作,这是否意味着证书存在于该机器上的某个地方?我可以把它移过来吗?
  • 嗯 - 如果是 facebook,您正在访问我提出的建议可能并非如此。但是您可以检查证书(在 Chrome 中,打开 https 页面,然后右键单击 -> 页面信息 -> 证书信息。这向我显示证书是“DigiCert High Assurance CA-3” - 您可以保存它,检查它在另一台机器上,如果没有,您可以将其导入前面提到的证书区域。如果这没有帮助,我建议 a) 检查可能重复的建议和/或 b) 发布一些代码,所以我们可以尝试重现问题
猜你喜欢
  • 2014-07-17
  • 2011-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-06
  • 2016-08-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多