.NET SNI支持

问题描述:

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

事实证明,我们的一个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吗?

如果依赖于Schannel,.NET Framework本身可能无法解决问题。 Schannel只开始支持SNI,因为Windows Vista/Windows Server 2008(或来自其他来源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的源代码,但我不认为微软使用SslStream或Schannel以外的任何其他东西。

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

+0

是的,我认为这是一个操作系统问题,Schannel的事情是有道理的,因为它是一个操作系统问题。我告诉他们Server 2003的EOF即将在明年推出,.NET在Server 2003之后推出。感谢您确认我的想法。 – JoeyZero 2014-10-03 16:02:55