Transport Layer Security (TLS) are cryptographic protocols designed to provide communications security over a computer network, typically between a website and a browser.
TLS 1.0 and its deprecated predecessor, SSL are vulnerable to some well-known security issues such as POODLE and BEAST attacks. According to NIST, these vulnerabilities cannot be fixed or patched, therefore all companies, especially banks and other financial institutions who are notoriously slow in upgrading theirs systems, need to upgrade to a secure alternative as soon as possible, and disable any fallback to both SSL and the older TLS 1.0.
As of 30 June 2018, SSL and TLS 1.0 should be disabled and more secure encryption protocol such as TLS 1.2 (or at the minimum TLS 1.1) is required to meet the PCI Data Security Standard (PCI DSS) for safeguarding payment data.
The next question then how on do we enable TLS 1.2 on Windows Servers? Especially on older servers such as Windows Server 2008 as many companies are not on the latest and greatest operating systems?
This post will address what to look for and how to enable TLS 1.2 as the default protocol for Windows Server 2012 R2 or older.
IMPORTANT: As always and it’s worth repeating, you need to backup your current registry settings before attempting any of these changes on your servers.
Enable TLS 1.2 on Windows Servers 2008 SP2 or later
The blanket statement to enable your TLS 1.2 on your server from Windows Server 2008 SP2 or later. Microsoft provided an update to add support for TLS 1.1 and TLS 1.2 for Windows Server 2008, but it requires Windows Server 2008 SP2 installed.
So just to state the obvious, TLS 1.1 and TLS 1.2 are not supported for 32-bit Windows Server 2008 SP1.
-
Launch regedit.exe.
-
In registry, go to:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols
-
Create a new DWORD entry with a name TLS 1.2 and create another subkey Client and Server.
-
Under the subkey Server, create another DWORD Enabled with a value of 1.
-
Still under the subkey Server, create a DWORD DisabledByDefault with a value of 0.
-
You must create a subkey DisabledByDefault entry in the appropriate subkey (Client, Server) and set the DWORD value to 0 since this entry is set to 1 by default.
-
Reboot the server and test.
Enable TLS 1.2 on .NET Framework 3.5 (including 2.0)
.NET Framework 3.5 or earlier did not originally provide support of applications to use TLS System Default Versions as a cryptographic protocol. However, for Windows Server 2012 R2, check if KB3154520 is installed (or KB3154519 for Windows Server 2012; KB3154518 for Windows Server 2008 R2; KB3154517 for Windows Server 2008 SP2).
How to check the KB updates
-
Right-click on the Windows button and select Programs and Features.
-
On Programs and Features window, click onthe View installed updates on the left pane.
-
You will see a list of the updates that you can narrow down or do a very specific search by using the Search Installed Updates box. You can type in the KB number (i.e., “KB3154520”).
-
If the corresponding KB is already installed, we just need to enable it via registry change. Otherwise, you need to install the patch from either of the links for Windows Server 2012 R2 (or use the same corresponding links above for earlier versions of Windows Server).
Registry Change
-
Launch regedit.exe.
-
Go to:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0.50727
-
Create a new entry SystemDefaultTlsVersions with a DWORD value set to 1.
-
Create a new entry SchUseStrongCrypto with a DWORD value set to 1.
-
Go to:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319
-
Create a new entry SystemDefaultTlsVersions with a DWORD value set to 1.
-
Create a new entry SchUseStrongCrypto with a DWORD value set to 1.
-
For 64-bit OS, the same changes also needed for the following locations:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v2.0.50727
-
Create a new entry SystemDefaultTlsVersions with a DWORD value set to 1.
-
Create a new entry SchUseStrongCrypto with a DWORD value set to 1.
-
Go to:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319
-
Create a new entry SystemDefaultTlsVersions with a DWORD value set to 1.
-
Create a new entry SchUseStrongCrypto with a DWORD value set to 1.
-
Test.
Enable TLS 1.2 as default for WinHTTP
This may be applicable for any Classic ASP or VB6 applications that use WinHTTP. Prior to Windows 10 and Windows Server 2016, TLS 1.1 or 1.2 is not enabled by default for client-server communications through WinHTTP.
To set TLS 1.2 by default, do the following:
-
Create a registry entry DefaultSecureProtocols on the following location:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp
-
Set the DWORD value to 800 for TLS 1.2.
-
For 64-bit OS, repeat step 1 and 2 on the following location:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp
-
Reboot the server and test.
Windows 10 and Windows Server 2016/2019 support TLS 1.2 for client-server communications by using WinHTTP.
Further Reading
Update to enable TLS 1.1 and TLS 1.2 as default secure protocols in WinHTTP in Windows
TLS/SSL Settings
How to enable TLS 1.2 for Configuration Manager
Transport Layer Security (TLS) best practices with the .NET Framework
Support for TLS System Default Versions included in the .NET Framework 2.0 SP2 on Windows Vista SP2 and Server 2008 SP2
Support for TLS System Default Versions included in the .NET Framework 3.5.1 on Windows 7 SP1 and Server 2008 R2 SP1
Support for TLS System Default Versions included in the .NET Framework 3.5 on Windows Server 2012
Support for TLS System Default Versions included in the .NET Framework 3.5 on Windows 8.1 and Windows Server 2012 R2
How to enable TLS 1.2 on the site servers and remote site systems
Use Case Scenario: Known issues connecting SSRS Server 2016 (new) to SQL Server 2008 (old) with TLS
Download
Solving the TLS 1.0 Problem (MS Word document)
Thank you very much, it helped me here, using server 2012r2, just update the .NET Framework information in the registry
That’s great Thiago. Thanks for your feedback.
Thank you very much for this article! it is really useful.
May I ask the point of making these changes to key: v4.0.30319
The MS KB articles only list v2.0.50727
Thank you!
Hi Charlie,
I’m strictly answering out of memory here in our effort at the time, we had to change both to enable TLS 1.2 on .NET 4 as well even though the KB only showed 2.0. Now, Microsoft just released a new document that includes both 2.0 and 4.0.
How to enable TLS 1.2 on the site servers and remote site systems
if TLS 1.2 is enabled by default on windows 2016 server but i don’t see any entries for TLS 1.2 when checking the registry.
You wouldn’t see it because it’s already active by default so you don’t have to add any values for it to be turned on. You only need to do so if for any reason you need to disable it.
In my experience for whatever reason .NET doesn’t care that your version of Windows Server supports certain ciphers by default. It will still look for those registry keys for .NET applications.
Hi. Do you need to restart the server after making the registry changes?
Hi Juan, not all the time! I made sure that when a server reboot is needed I put that in as the last step. But when in doubt and you don’t risk interrupting any production applications, it’s always good to restart.
Dear Guru,
If we have Windows 2016 and following protocols are enabled on it.
TLS 1.0
Client = Enable
Server = Enable
TLS 1.1
Client = Enable
Server = Enable
TLS 1.2
Client = Enable
Server = Enable
Then in the above case, if the client will connect the server, which protocol will call first and the client will stop on which protocol.
Thanks
Malik Adeel Imtiaz
@MALIK ADEEL IMTIAZ
it depend on your client request.
i disable 1.0 and 1.0 on my servers and keep pc/server updated.
When i try to install the KB for server 2012R2, it tells me its not applicable for my operating system
Hi Steve,
The KB # is very specific to your Server OS, make sure you get the correct one (KB3154520). Even between 2012 and 2012 R2 have different KB number. If it’s already installed, it will also give you the same message.Did you check if it’s already on your server?