由于 SalesForce 下周将放弃 TLS 1.0,我们被迫在 API 调用中使用 TLS 1.1 或 1.2,我们使用 SSIS 自定义 CozyRoc 组件从 Windows Server 2008R2 中提取 DWH 数据。我们安装了补丁,并确保注册表中有所需条目,如这文章。虽然我们没有向 SCHANNEL 添加任何密钥,但现在那里列出的唯一协议是 SSL 2.0。
接下来,当然是在重新启动之后,我用 Wireshark 记录了跟踪,发现 SSIS 包中的 CozyRoc 组件使用 TLS 1.0,因为在 Server Hello 消息中,我们在握手协议部分获得了 TLS 1.0。构建调用的 CozyRoc 组件支持 TLS 1.2。
我的问题是:如何测试我们的服务器是否可以使用 TLS 1.2 与 SalesForce 通信?我知道禁用 TLS 1.0 可能会扰乱其他连接,所以我不想这样做。理想情况下,我想知道我的 SSIS 包是否使用 TLS 1.2。
更新:我尝试连接到我们的测试 Salesforce 站点,该站点已禁用 TLS 1.0。现在,当我尝试连接时,我收到一条错误消息,提示
“UNSUPPORTED_CLIENT:此组织已禁用 TLS 1.0。使用 https 连接到 Salesforce 时,请使用 TLS 1.1 或更高版本。(System.Web.Services)”|
我仍然不知道问题出在我的服务器设置还是 CozyRoc 组件上,所以我现在正在寻找任何方法来确保 TLS 1.2 在服务器上独立于 SSIS 设置运行。有什么想法吗?
答案1
请注意,Windows 2008 默认禁用 TLS 1.2(请参阅这里)。因此,您需要根据注册表更改启用它(见下文),您还需要了解存在客户端配置和服务器配置。因此,如果您例如在客户端级别启用 TLS 1.2,但在服务器级别未启用,则针对端口 443 的 nMAP 将不会显示已启用 TLS 1.2,因为它仅针对客户端启用。
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client]
"Enabled"=dword:ffffffff
"DisabledByDefault"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server]
"Enabled"=dword:ffffffff
"DisabledByDefault"=dword:00000000
您在这里需要的几乎不取决于您的应用程序以及它如何与远程服务交互。例如,如果第三方应用程序将使用 https 会话来访问您的环境,那么这将是服务器端配置。但是,如果您有一个第三方插件作为服务运行,并且与第三方服务器执行连接,那么这就是客户端配置。
此外,还有一个修补程序,允许使用 WinHTTP 编写的应用程序和服务使用安全套接字层 (SSL) 连接来使用 TLS 1.1 或 TLS 1.2 协议,您应该安装该协议(由于这是一个较旧的修补程序,因此尚未完成;请参阅这里)。
此外,如果第三方组件未使用 Microsoft SCHANNEL 实现,则注册表端的任何更改都将不起作用。因为第三方组件可能正在使用另一个 SSL 实现,例如 OpenSSL。在这种情况下,您需要联系供应商以检查如何在此处启用 TLS 1.2。例如,在使用 Java 组件(例如 TomCat)时也是如此。然后调整 Microsoft SCHANNEL 实现不会影响它们。
SalesForce 本身有一份非常好的文档,上面有比我在这里提供的更详细的内容。所以你也应该看看(见这里)。此外,他们还提供了多种“如何测试”方法来测试 TLS 配置,然后您可以执行这些配置。
答案2
我的问题的答案非常简单,只需访问https://www.howsmyssl.com/。此外,Wireshark 跟踪表明我的服务器在测试连接时使用 TLS 1.2 与 Salesforce 站点交换握手。
就我而言,瓶颈是 Cozyroc SSIS+ 版本 - 目前是 1.6.103 而您至少需要 1.6.104 才能使用 TLS 1.1 或更高版本,因此请务必检查。