In summary, we need to use Application Request Routing 3.0 to securely reverse-proxy HTTPS requests made to a web server, to the same URL on an application server, where both servers are running Windows Server 2008 R2. The web server is allowed to support incoming and outgoing TLS 1.0 and TLS 1.2 connections, but the application server is only allowed to support TLS 1.2 for incoming connections (outgoing TLS 1.0 is allowed, but probably not relevant to this question).
[Browser] --TLS 1.0/1.2--> [Web server + ARR] --TLS 1.2--> [Application server]
I have configured the SCHANNEL registry settings on the application server as shown below ("HKEY_LOCAL_MACHINE" replaced with "HKLM" for formatting reasons). The web server is similarly configured, but with TLS 1.0 client and server connections enabled as well. The servers were rebooted after the registry change.
[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
For the most part, the SCHANNEL settings seem to work as expected, but ARR will only offer TLS 1.0 in the Client Hello of the SSL handshake with the application server, as observed with Wireshark and NetMon. The connection is then dropped because the application server cannot continue the handshake and ARR returns a Bad Gateway error to the browser. Making a browser (IE 11) request directly from the web server to the application server results in a successful TLS 1.2 handshake.
Disabling TLS 1.0 client connections from the web server results in the web server not even sending a Client Hello (and a Bad Gateway response returned to the browser, with a slightly different reason).
Enabling TLS 1.0 server connections on the application server results in a successful TLS 1.0 handshake and ARR proxies the request as expected.
The servers that I'm trying to use have had all updates installed directly from Windows Update.
Either using an IIS Server Farm or hard-coding the application server name into the re-write rules doesn't appear to make any difference.
The same configuration works fine on Windows Server 2012 and I am able to reproduce the symptoms on Server 2008 R2 VMs that I have created on Azure.
What I'd really like to know is whether this is actually possible with ARR and Windows Server 2008 R2 and if so, what additional configuration steps or patches are necessary. While suggestions of other technologies might be helpful, we are constrained with fairly inflexible requirements at this point.