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?
如何强制 WinInet 和 MSXML 使用 TLS1.0