1

我有一个由我管理的另一个开发人员用 .NET 3.5 编写的 Web 服务 (asmx) API。我们最近从 Server 2008R2 迁移到 Server 2012R2,我决定使用 SNI 而不是每个证书都有一个 IP。

事实证明,我们的一位 API 用户在切换到 SNI 后不再能够连接到我们的 API。我发现他们使用的是 Server 2003,我认为这是它不再工作的原因。我继续为该站点分配了一个公共 IP,从而解决了该问题。当然,他们将其完全归咎于 .NET 框架。

他们的证明是这个链接: https ://connect.microsoft.com/VisualStudio/feedback/details/729925/net-4-4-5-sslstream-no-supports-the-tls-server-name-indication-sni

我有一个连接到我们的 API 并运行各种测试的测试项目设置,并且在转换后它工作正常。

任何人都可以对此有所了解吗?SoapHttpClientProtocol 是否使用 sslstream?

4

1 回答 1

1

如果依赖于 Schannel,.NET Framework 本身可能无法解决该问题。Schannel 仅从Windows Vista/Windows Server 2008开始支持 SNI (或从其他来源Windows 8/Windows Server 2012

好吧,根据第一个链接,SslStream 确实依赖于 Schannel。我刚刚在 Windows 7/.NET 4 和 Windows 8.1/.NET 4.5.1 上完成了一个测试用例,我可以看到客户端应用程序利用 SslStream SNI 按预期工作。因此,我认为您粘贴的 Microsoft Connect 链接根本不是有效链接。SNI 在 Windows XP 和 Windows Server 2003 上可能会失败,但应该适用于 Windows Vista 及更高版本。

我没有检查 SoapHttpClientProtocol 的源代码,但我认为 Microsoft 不使用 SslStream 或 Schannel 以外的任何东西。

所以在你的情况下,我建议你在服务器端回滚你的更改并且不要使用 SNI。另一种解决方案是要求所有用户使用 Windows Vista 及更高版本作为操作系统。请注意,Windows XP 已死,Windows Server 2003 已死(明年将死,所以很快)。

于 2014-10-03T05:53:21.580 回答