.NET SNI 支持

标签 .net web-services ssl sni

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

事实证明,我们的一位 API 用户在切换到 SNI 后不再能够连接到我们的 API。我发现他们使用 Server 2003,我认为这是它不再工作的原因。我继续为该站点分配了一个公共(public) 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?

最佳答案

如果 .NET Framework 依赖于 Schannel,其本身可能无法解决该问题。 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 也即将消亡(明年就会消亡,所以很快)。

关于.NET SNI 支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26171425/

相关文章:

c# - 如何在 C# 中创建按需 DynamoDB 表?

c# - MVC 中的硬编码 Controller 、 View 和操作名称是好的做法吗?

jquery - 最佳实践 - 从 Web 服务抛出异常

java - 轴故障 : Transport error: 415 Error in AXIS2 client(JAVA)

Python Magic(智能,双模)SSL Socket?

c# - CaSTLe 3.0 如何删除组件?

.net - 如何从 VB.Net 读取 Excel 单元格

java - 如何通过ajax调用使用rest web服务

ssl - 错误 : unable to verify the first certificate/How to trust all certificates?

ruby-on-rails - rails : local server handling SSL