【问题标题】:Strange issue when resolving server SSL certificate within UnitTest in Visual Studio在 Visual Studio 的 UnitTest 中解析服务器 SSL 证书时出现奇怪的问题
【发布时间】:2016-01-15 09:42:50
【问题描述】:

当 Visual Studio 解析服务器 SSL 证书时,我遇到了一个非常奇怪的问题。

我使用的 API 要求我发送证书以及“验证我是谁”的请求。最初,我在我的 UnitTest 中使用 X509Certificate2 引用此证书,然后将其作为 byte[] 导入。我不想做的是,在我的代码中放置这个引用我本地磁盘上的特定位置(我想在我的构建服务器上自动运行单元测试)所以选择在证书存储中安装证书(我以后可以安装在构建服务器上)。当我在浏览器 (IE) 中测试这个 Uri 时,它要求我提供我想使用的证书,我很愚蠢地点击了确定,而没有真正阅读它要求我做什么。

问题是,因为这样做我无法运行我的单元测试(我正在制作一个HttpWebRequest) - 一旦它到达下一行,它就会抛出一个WebException

using (var response = request.GetResponse()) 
{
    // Removed content ...
}

异常响应为 null ,这里是异常

System.Net.WebException:底层连接已关闭:一个 接收时发生意外错误。 ---> System.IO.IOException: 无法从传输连接读取数据:现有 连接被远程主机强行关闭。 ---> System.Net.Sockets.SocketException:现有连接是 被远程主机强行关闭

我看到此错误的唯一原因是 Visual Studio 使用错误的 SSL 证书进行服务器连接(因为我使用的是测试 API Uri,我可以通过使用实时 API 来验证这种情况Uri 工作正常)

我尝试了以下方法:

  • 从存储中删除证书
  • 将证书添加回存储区
  • 清除所有浏览器缓存
  • 将 IE 恢复为“出厂设置”
  • 清除 IE 中的 SSL 缓存
  • 尝试将 Keepalive 设置为 true,然后设置为 false

这个问题影响了所有浏览器,但我已经设法让它工作。我尝试使用 Fiddler 来确定服务器是否正在做一些疯狂的事情(包括解密 SSL 连接),我可以看到这实际上是响应 403 错误。

还有其他人有什么想法吗?

编辑

刚刚尝试在构建服务器上运行它,仍然得到相同的错误,所以我将与 API 提供者联系,看看 a/我的证书是否已过期 b/他们的服务实际上已启动!

System.Net.WebException:底层连接已关闭:一个 接收时发生意外错误。 ---> System.IO.IOException: 无法从传输连接读取数据:现有 连接被远程主机强行关闭。 ---> System.Net.Sockets.SocketException:现有连接是 被远程主机强行关闭

【问题讨论】:

    标签: c# visual-studio ssl httpwebrequest


    【解决方案1】:

    问题在于 API 提供者。

    【讨论】:

      猜你喜欢
      • 2017-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多