在Visual Studio的UnitTest中解析服务器SSL证书时出现奇怪的问题

本文关键字:证书 问题 SSL 服务器 Studio Visual UnitTest | 更新日期: 2023-09-27 18:30:34

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

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

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

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

响应为空,这里是异常

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

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

我尝试了以下方法:

  • 从存储中删除证书
  • 将证书添加回存储区
  • 清除所有浏览器缓存
  • 将IE恢复为"出厂设置"
  • 清除 IE 中的 SSL 缓存
  • 尝试将保持连接设置为真,然后设置为假

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

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

编辑

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

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

在Visual Studio的UnitTest中解析服务器SSL证书时出现奇怪的问题

问题出在 API 提供程序上。