强制PresentationHost使用TLS 1.2

时间:2018-10-17 15:57:02

标签: tls1.2 xbap

服务器已禁用TLS 1.0 / 1.1。客户端是在Internet Explorer中运行的XBAP应用程序。看起来PresentationHost试图建立TLS 1.0连接,但由于服务器拒绝而失败。我可以以某种方式强制(例如以编程方式或配置文件)PresentationHost使用TLS 1.2吗?我知道可以相应地设置客户端的注册表(将SchUseStrongCrypto设置为1),但是我想避免用户配置任何东西。

3 个答案:

答案 0 :(得分:2)

通常,我希望客户端协商支持和启用的最高TLS级别。由于仅尝试使用TLS 1.0后您的连接失败,因此我怀疑客户端可能不支持并启用TLS1.1和TLS1.2。

使用.Net 4.7构建的应用程序将默认为SecurityProtocolType.SystemDefault,该文件由操作系统选择,并且可以通过注册表设置进行修改。 SecurityProtocolType定义为:

  

... SecurityProtocol属性的枚举类型。用这个   枚举以确定您的传输安全协议策略   您在.NET Framework中使用HTTP API(例如WebClient),   HttpWebRequest,HttpClient和SmtpClient(使用TLS / SSL时)。

早期版本的框架版本可能默认为特定的协议类型,而与操作系统默认设置无关。在大多数情况下,如果启用它们,他们仍应尝试其他协议。

如果您看到的行为不是您想要的,那么第一件事就是确保目标框架版本和OS版本都能够支持您要启用的安全协议类型(例如TLS 1.2)。操作系统版本支持的协议版本列表为here

如果.Net 的目标版本都支持TLS1.2,那么您应该能够通过设置ServicePointManager安全协议类型来强制连接仅接受TLS1.2。 要将其限制为单个协议(例如TLS1.2),只需在进行网络通话之前进行设置即可:

.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

您可以OR一起使用协议,因此可以通过执行以下操作来启用TLS 1.1和1.2,同时保持已启用的TLS:

System.Net.ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

如果您只想在允许其他协议(包括将来的版本)的同时关闭TLS1.0等较旧的协议,则可以执行以下操作:

System.Net.ServicePointManager.SecurityProtocol &= ~SecurityProtocolType.Tls;

您可以随时进行设置,也可以将其放入诸如Global.asax Application_Start之类的全局配置中。

ServicePointManager.SecurityProtocol的文档为here

为完整性起见,我注意到,如果您必须以.Net4.0为目标,则只需在目标版本旁边安装.Net4.5,仍然可以使用上述技术来指定TLS1.2。如果您更新几个.dll文件,则甚至可能使用较旧版本的框架执行此操作。说明是here

值得注意的是,根据证书配置,注册表设置和安装的更新,整个事情还可能以其他方式失败。

我了解您想远离用户设置,但是有些浏览器设置也可能会影响此行为。请参阅MSDN博客文章here,其中介绍了Firefox和IE的设置。

  

在客户端,您可以在浏览器设置中进行检查。如果你   在上面列出的任何受支持的Windows操作系统上使用IE,然后在   IE,浏览至工具-> Internet选项->高级。在下面   在“安全”部分,您会看到受支持的SSL协议列表   IE浏览器IE仅支持那些安全协议版本,即   由操作系统的基础SCHANNEL组件支持。

编辑:

如果以上信息不足以解决问题,那么该启动WireShark并直接查看TLS协商了。只需将捕获过滤器设置为“ SSL”,选择要跟踪的IP地址,然后使用菜单下拉菜单或键盘快捷键Ctrl-Alt-Shift-S即可跟踪SSL流。您可能会发现问题毕竟出在服务器端,或者您可能会在一侧或另一侧看到证书问题。

即使您通常不使用WireShark,执行此操作也非常快,并且有许多可用的教程。我喜欢cisco网站here上的一个,如果链接消失了,我会简要地引用一下:

  

跟随ssl流可以使您清楚地了解整个情况   TLS握手和公钥交换,证书最高可达   对称密钥用于进一步加密。

     

...使用https连接时总是发生的第一件事是   客户端(您的浏览器)宣布其密码功能,基本上   告诉服务器您要连接到哪种安全算法   有能力。显示在下面的屏幕截图中

enter image description here

答案 1 :(得分:0)

似乎与基础IE版本有关。

您可以确认用户代理吗?

也请执行一个testssl.sh。

要使用该工具,请导航至https://testssl.sh

答案 2 :(得分:0)

正如Craig.Feied所提到的,有必要为XBAP应用程序明确启用更高级别的安全协议。

默认情况下,即使在.NET 4.7.2下,System.Net.ServicePointManager.SecurityProtocol也设置为 Ssl3 Tls 作为 XBAP应用程序支持的协议。

要为您的 XBAP应用程序启用TLS 1.1或1.2协议,请添加using语句以包含 System.Net 并添加类似于以下内容的行:

System.Net.ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

注意:标准WinForms应用程序将协商TLS 1.2,而无需额外的代码行,但是XBAP应用程序并不那么聪明