BizTalk 2016 管理员因强制 tls1.1+ 而失败

Posted

技术标签:

【中文标题】BizTalk 2016 管理员因强制 tls1.1+ 而失败【英文标题】:BizTalk 2016 Administrator fails with forced tls1.1+ 【发布时间】:2018-03-10 17:52:20 【问题描述】:

我们要求在所有服务器上使用 TLS1.2。这意味着使用下面的注册表设置强制 TLS1.2 系统范围。当我设置这些设置并重新启动服务器时,在 BizTalk Administrator 中展开 BizTalk Group 菜单时收到以下错误消息。在这个特定的环境中,一切都在一个操作系统/服务器上运行。请记住,如果我在注册表中启用 TLS1.0,一切正常。

我已经阅读了几篇文章,指出从 .NET 4.5 开始,TLS1.1/1.2 就受到支持,所以......这里有什么问题?

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0]

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client]
"DisabledByDefault"=dword:00000001
"Enabled"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server]
"DisabledByDefault"=dword:00000001
"Enabled"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1]

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client]
"DisabledByDefault"=dword:00000000
"Enabled"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server]
"DisabledByDefault"=dword:00000000
"Enabled"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2]

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client]
"DisabledByDefault"=dword:00000000
"Enabled"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server]
"DisabledByDefault"=dword:00000000
"Enabled"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v4.0.30319]
"AspNetEnforceViewStateMac"=dword:00000001
"SchUseStrongCrypto"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319]
"AspNetEnforceViewStateMac"=dword:00000001
"SchUseStrongCrypto"=dword:00000001

操作系统:Windows Server 2016 SQL版本:SQL Server 2016 BizTalk 版本:BizTalk Enterprise 2016 CU3 .NET 4.7 版

【问题讨论】:

你还能打开SSMS查询数据库吗? 是的,似乎是 BizTalk 本身正在使用的 OLEDB 驱动程序。试图弄清楚如何确定 OLEDB 驱动程序的版本并可能对其进行更新... 根据微软人士here的回复,BizTalk core不兼容没有TLS1.0。这对我们来说是一个炫耀...... 我们所做的是编写自定义端点行为,在需要它的发送端口上设置 TSL 版本。最初按照这篇文章更改销售团队 OAuth 组件 biztalkbox.wordpress.com/2016/08/09/… 后来作为独立组件。我已经问过我是否可以开源,等待批准。 另见social.technet.microsoft.com/Forums/Lync/en-US/… 特别是 Rajshekher-BT 的最终答案 【参考方案1】:

更新:支持Feature Pack 2 for BizTalk 2016 或CU5。

原答案 不幸的是,您不能这样做,根据来自 Microsoft 的 Rajshekher-BT 在Does BizTalk Server 2013 support TLS1.2? 中的回答,请参见下文。

我在 User Voice 上提出了它(但那个网站现在已经消失了)

BizTalk 核心引擎需要 TLS 1.0 来操作主机,因此您无法在注册表中禁用 TLS。但是,您可以同时启用 TLS 1.0 和 TLS 1.2,并让基于 .NET/WCF 的适配器更喜欢使用带有 SchUseStrongCrypto=1 注册表项的 TLS 1.2。

一些网络服务器可能会尝试协商,而另一些则在第一次尝试时失败。如果您在不同的 WCF http 端点中有不同的 TLS 设置,您可以使用 WCF 自定义行为来设置。然后,您应该将所有 TLS 1.0 保存在一个主机中,并将所有 TLS 1.2 集成端点保存在另一台使用的主机中。 1. 确保同时启用 TLS 1.0 和 TLS 1.2 2. 不要设置 SchUseStrongCrypto 注册表项。 3. 此时的默认行为将是 TLS 1.0(回退到 SSL3),因此对于需要 TLS 1.2 的任何 WCF 发送端口,使用 WCF 自定义发送端口中的自定义端点行为设置 System.Net.ServicePointManager.SecurityProtocol 属性.

如果你想允许回退逻辑,你可以 OR 它如下: System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12 | System.Net.SecurityProtocolType.Tls11 | System.Net.SecurityProtocolType.Tls | System.Net.SecurityProtocolType.Ssl3; 最好为 TLS 1.0 设置一种自定义行为,为 TLS 1.2 设置一种自定义行为,这样您就可以明确并知道您使用的是什么,并且当某些事情发生变化时它会失败。确保不要在同一主机中混合不同的 WCF 行为,因为 ServicePointManager 是全局进程设置。

我个人使用了Salesforce disabling TLS 1.0 – How to get it working for API calls via BizTalk中详述的可配置端点行为

【讨论】:

以上是关于BizTalk 2016 管理员因强制 tls1.1+ 而失败的主要内容,如果未能解决你的问题,请参考以下文章

如何强制 JavaMailSenderImpl 使用 TLS1.2?

如何在 BizTalk 自定义管道中实现下拉列表

如何强制 WinInet 和 MSXML 使用 TLS1.0

Biztalk 2016 无法配置组

C#:强制 TLS1.2 但 Https 服务器仍然给出常见算法错误

BizTalk 2016 sFTP WinSCP - 无法接收更多消息