是否可以configurationARR在Server 2008 R2中创buildTLS 1.2传出连接?

总而言之,我们需要使用应用程序请求路由3.0安全地将对Web服务器的HTTPS请求反向代理到应用程序服务器上的同一个URL,其中两台服务器都运行Windows Server 2008 R2。 允许Web服务器支持传入和传出的TLS 1.0和TLS 1.2连接,但应用程序服务器只允许支持传入连接的TLS 1.2(允许传出TLS 1.0,但可能与此问题无关)。

[浏览器] –TLS 1.0 / 1.2 – > [Web服务器+ ARR] –TLS 1.2 – > [应用程序服务器]

我已经在应用程序服务器上configuration了SCHANNELregistry设置,如下所示(出于格式原因,“HKEY_LOCAL_MACHINE”replace为“HKLM”)。 Web服务器的configuration类似,但也启用了TLS 1.0客户端和服务器连接。 registry更改后,服务器重新启动。

[HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Client] "DisabledByDefault"=dword:00000001 [HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server] "Enabled"=dword:00000000 [HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Client] "DisabledByDefault"=dword:00000001 [HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Server] "Enabled"=dword:00000000 [HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client] "DisabledByDefault"=dword:00000000 "Enabled"=dword:00000001 [HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server] "DisabledByDefault"=dword:00000000 "Enabled"=dword:00000000 [HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client] "DisabledByDefault"=dword:00000001 "Enabled"=dword:00000000 [HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server] "DisabledByDefault"=dword:00000001 "Enabled"=dword:00000000 [HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client] "DisabledByDefault"=dword:00000000 "Enabled"=dword:00000001 [HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server] "DisabledByDefault"=dword:00000000 "Enabled"=dword:00000001 

在大多数情况下,SCHANNEL设置似乎按预期工作,但ARR将只在客户端提供TLS 1.0与应用程序服务器的SSL握手,如Wireshark和NetMon所示。 由于应用程序服务器无法继续握手,并且ARR向浏览器返回错误的网关错误,连接将被丢弃。 直接从Web服务器向应用程序服务器发送浏览器(IE 11)请求会导致成功的TLS 1.2握手。

从Web服务器禁用TLS 1.0客户端连接会导致Web服务器甚至不会发送客户端Hello(和返回给浏览器的错误网关响应,原因稍有不同)。

在应用程序服务器上启用TLS 1.0服务器连接会导致成功的TLS 1.0握手,并且ARR会按预期方式代理请求。

我试图使用的服务器已经从Windows Update直接安装所有更新。

使用IIS服务器场或将应用程序服务器名称硬编码到重写规则中似乎没有任何区别。

在Windows Server 2012上,相同的configuration工作正常,我能够在Azure上创build的Server 2008 R2 VM上重现症状。

我真正想知道的是,在ARR和Windows Server 2008 R2中这是否实际可行,如果是这样,还需要哪些其他configuration步骤或修补程序。 虽然其他技术的build议可能会有所帮助,但在这一点上,我们受到相当不灵活的要求限制。

这将改变操作系统的默认值,以允许所有的TLS版本(甚至如果你select的话,甚至是SSL)。 我在ARR Windows 2008 R2上testing了这个。 Windows Easy Fix修补程序

是的,这是可能的。

https://support.microsoft.com/en-us/help/3140245/update-to-enable-tls-1.1-and-tls-1.2-as-a-default-secure-protocols-in-winhttp-in-视窗

我通过GPO将registry项部署到了我所有的Windows 7 2008 R2

上面的答案从Microsoft IIS / ASP.NET开发人员支持不正确。 我不能评论,因为声誉。

这确实有用。 在ARR 2008 R2 sp1上进行更新确认。 在reg键之前(使用winhttp)的ARR输出是TLS 1.0在reg键之后(我使用了A80来启用TLS 1.0-1.2)ARR使用TLS 1.2输出。

更新 Microsoft已经发布了一个补丁和相关的解决方法步骤,因为这个答案已经提交。 请参阅更新的答案和评论的细节。

原来答案是否定的,这是不可能的。

以下来自Microsoft IIS / ASP.NET Developer Support的响应阐明了技术细节。

经过进一步的调查,我们发现使用Windows Server 2008 r2和ARR使用WinHTTP发出出站请求,从而绑定到操作系统的默认协议。 (SSL3和TLS 1.0)简答 – ARR不支持WinHttpSetOption和WINHTTP_OPTION_SECURE_PROTOCOLS标志来传递WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_2值

WinHttp!Internet_Session_Handle_Object直接从%SDXROOT%\ net \ winhttp \ inc \ defaults.h加载dwSecureProtocols值Windows Server 2008 R2仅支持SSL3和TLS 1.0。 IIS可以configuration为使用TLS 1.2,但ARR绑定到操作系统的默认设置,无论configuration如何将始终使用SSL 3或TLS 1.0。 直到OS默认值被更改。