{"id":537,"date":"2026-08-03T23:12:55","date_gmt":"2026-08-03T23:12:55","guid":{"rendered":"https:\/\/windows-vps.org\/blog\/?p=537"},"modified":"2026-10-03T22:07:10","modified_gmt":"2026-10-03T22:07:10","slug":"enable-tls-12-tls-13-system-wide-windows-vps","status":"publish","type":"post","link":"https:\/\/windows-vps.org\/blog\/enable-tls-12-tls-13-system-wide-windows-vps\/","title":{"rendered":"Enable TLS 1.2 and TLS 1.3 System-Wide on a Windows VPS: Schannel Registry Settings and Verification"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Windows Server 2022 and 2025 ship with TLS 1.2 enabled by default, but many hardened VPS images still have legacy protocol bits turned on, and TLS 1.3 support depends on the exact build of Schannel. If you run IIS, SQL Server, .NET services, or an RDP endpoint, the transport security layer is the single most leveraged setting on the box. This guide gives you the exact registry keys, the PowerShell to apply them, and verification commands so you can prove the change took effect.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Why &#8220;it&#8217;s already on by default&#8221; is not enough<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Schannel protocol defaults are controlled per-client and per-server under <code>SYSTEM\\CurrentControlSet\\Control\\SecurityProviders\\SCHANNEL\\Protocols<\/code>. Microsoft disables SSL 2.0 and SSL 3.0 by default, but TLS 1.0 and TLS 1.1 remain negotiable on most server builds unless explicitly disabled. Any legacy application that still asks for TLS 1.0 will happily succeed, which weakens your compliance posture and can break later when a partner disables it on their side.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The practical rule for 2026: disable SSL 2.0\/3.0 and TLS 1.0\/1.1, keep TLS 1.2 enabled, and enable TLS 1.3 for every role that supports it. Note that enabling TLS 1.3 with <em>both<\/em> the client and server subkeys is required \u2014 many broken deployments set only one.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The registry settings that matter<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Protocol<\/th><th>Enabled<\/th><th>DisabledByDefault<\/th><\/tr><\/thead><tbody><tr><td>SSL 2.0<\/td><td>0<\/td><td>1<\/td><\/tr><tr><td>SSL 3.0<\/td><td>0<\/td><td>1<\/td><\/tr><tr><td>TLS 1.0<\/td><td>0<\/td><td>1<\/td><\/tr><tr><td>TLS 1.1<\/td><td>0<\/td><td>1<\/td><\/tr><tr><td>TLS 1.2<\/td><td>1<\/td><td>0<\/td><\/tr><tr><td>TLS 1.3<\/td><td>1<\/td><td>0<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Each value lives under both a <code>Client<\/code> and a <code>Server<\/code> subkey, and each subkey needs a <code>Protocols<\/code> child. That is 2 (client\/server) x 6 (protocols) x 2 (values) = 24 value writes if you do it by hand.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Apply with PowerShell<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Run the following in an elevated session. It creates the keys idempotently, so it is safe to re-run.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$base = 'HKLM:\\SYSTEM\\CurrentControlSet\\Control\\SecurityProviders\\SCHANNEL\\Protocols'\n$spec = @{\n  'SSL 2.0' = @(0,1); 'SSL 3.0' = @(0,1)\n  'TLS 1.0' = @(0,1); 'TLS 1.1' = @(0,1)\n  'TLS 1.2' = @(1,0); 'TLS 1.3' = @(1,0)\n}\nforeach ($proto in $spec.Keys) {\n  foreach ($side in 'Client','Server') {\n    $path = Join-Path $base \"$proto\\$side\"\n    New-Item -Path $path -Force | Out-Null\n    New-ItemProperty -Path $path -Name 'Enabled' -Value $spec[$proto][0] -PropertyType DWord -Force | Out-Null\n    New-ItemProperty -Path $path -Name 'DisabledByDefault' -Value $spec[$proto][1] -PropertyType DWord -Force | Out-Null\n  }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">For .NET Framework applications you must additionally force the managed stack away from defaults using <code>SchUseStrongCrypto<\/code> and <code>SystemDefaultTlsVersions<\/code> under both the .NETFramework v2.0.50727 and v4.0.30319 keys. Without those, an old ASP.NET app on a modern Windows VPS can still negotiate TLS 1.0 even after the Schannel change.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Verification, not assumption<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li><code>Get-TlsCipherSuite | Sort-Object Name<\/code> lists what the OS can offer.<\/li><li><code>[Net.ServicePointManager]::SecurityProtocol<\/code> shows what .NET negotiates by default.<\/li><li>From another host: <code>openssl s_client -connect yourhost:443 -tls1_2<\/code> should succeed; <code>-tls1<\/code> and <code>-tls1_1<\/code> should fail with a handshake error.<\/li><li><code>Test-NetConnection -ComputerName yourhost -Port 443<\/code> confirms reachability before you blame TLS.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">The reboot and rollback<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Schannel reads these keys at process start, so IIS, SQL Server, and any long-lived service must be restarted \u2014 a full reboot is the clean approach. Before you change production, export the <code>Protocols<\/code> key with <code>reg export<\/code> so rollback is a one-liner. If a legacy client breaks after the change, re-enable only TLS 1.1 for that protocol&#8217;s <code>Client<\/code> subkey rather than reverting the server side.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Cipher suites and ordering<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Protocol version is only half the story. A TLS 1.2 connection can still use a weak CBC-mode cipher if the server offers it and the client prefers it. Windows Server 2022 and 2025 ship with a sane default order, but you should confirm that AES-GCM and ChaCha20 suites rank above any CBC suites, and that RSA key exchange is not inadvertently enabled for forward secrecy. The effective order is controlled under <code>HKLM\\SOFTWARE\\Policies\\Microsoft\\Cryptography\\Configuration\\SSL\\00010002\\Functions\\TLS12Ciphers<\/code> on newer builds, or via group policy when the server is domain-joined.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A practical verification step is to run a full handshake against every port that terminates TLS \u2014 443 for IIS, 1433 for SQL Server if you expose it, and any custom application ports. Different services can have different effective policies depending on when they started and which .NET runtime they loaded, so testing &#8220;the server&#8221; as a single entity is misleading.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Common failure patterns<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Only the Server subkey was edited:<\/strong> outbound connections from the server still negotiate legacy TLS. Always set both sides.<\/li><li><strong>TLS 1.3 enabled but not supported by the build:<\/strong> the key exists but the OS ignores it; check <code>Get-TlsCipherSuite<\/code> for any TLS 1.3 suites before assuming it works.<\/li><li><strong>.NET Framework still using defaults:<\/strong> the SchUseStrongCrypto override was not applied, so an old app negotiates down.<\/li><li><strong>Linux clients failing after hardening:<\/strong> usually an outdated client library rather than a server defect \u2014 verify with a modern client before rolling back.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Operating rhythm<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Treat transport security as a recurring task, not a one-time project. New Windows cumulative updates periodically add cipher suites, and application upgrades can reintroduce old defaults. A quarterly review that re-exports the registry, re-runs the external handshake checks, and confirms no new legacy protocol has reappeared keeps you ahead of both attackers and compliance audits. Document the current policy in your runbook so the next administrator knows exactly why each key is set.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Finally, remember that TLS hardening is only the transport. Pair it with certificate hygiene, strong ciphers, and HSTS on the web tier. If you are planning a fresh deployment and want a clean starting point, <a href=\"https:\/\/windows-vps.org\/\">see our Windows VPS plans<\/a>, and for team workflows read more about <a href=\"https:\/\/windows-vps.org\/\">managed Windows environments<\/a> that ship with sane security defaults.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Windows Server 2022 and 2025 ship with TLS 1.2 enabled by default, but many hardened VPS images still have legacy protocol bits turned on, and TLS 1.3 support depends on the exact build of Schannel. If you run IIS, SQL Server, .NET services, or an RDP endpoint, the transport security layer is the single most &#8230; <a title=\"Enable TLS 1.2 and TLS 1.3 System-Wide on a Windows VPS: Schannel Registry Settings and Verification\" class=\"read-more\" href=\"https:\/\/windows-vps.org\/blog\/enable-tls-12-tls-13-system-wide-windows-vps\/\" aria-label=\"Read more about Enable TLS 1.2 and TLS 1.3 System-Wide on a Windows VPS: Schannel Registry Settings and Verification\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":2,"footnotes":""},"categories":[5],"tags":[],"class_list":["post-537","post","type-post","status-publish","format-standard","hentry","category-tutorials-guides"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.1 (Yoast SEO v26.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Enable TLS 1.2 and TLS 1.3 System-Wide on a Windows VPS: Schannel Registry Settings and Verification - Windows VPS Blog<\/title>\n<meta name=\"description\" content=\"Windows Server 2022 and 2025 ship with TLS 1.2 enabled by default, but many hardened VPS images still have legacy protocol bits turned on, and TLS 1.3\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/windows-vps.org\/blog\/enable-tls-12-tls-13-system-wide-windows-vps\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Enable TLS 1.2 and TLS 1.3 System-Wide on a Windows VPS: Schannel Registry Settings and Verification\" \/>\n<meta property=\"og:description\" content=\"Enable TLS 1.2 and TLS 1.3 System-Wide on a Windows VPS: Schannel Registry Settings and Verification\" \/>\n<meta property=\"og:url\" content=\"https:\/\/windows-vps.org\/blog\/enable-tls-12-tls-13-system-wide-windows-vps\/\" \/>\n<meta property=\"og:site_name\" content=\"Windows VPS Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-03T23:12:55+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-03T22:07:10+00:00\" \/>\n<meta name=\"author\" content=\"windows-vps\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@myxiechengxuan\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"windows-vps\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/windows-vps.org\/blog\/enable-tls-12-tls-13-system-wide-windows-vps\/\",\"url\":\"https:\/\/windows-vps.org\/blog\/enable-tls-12-tls-13-system-wide-windows-vps\/\",\"name\":\"Enable TLS 1.2 and TLS 1.3 System-Wide on a Windows VPS: Schannel Registry Settings and Verification - Windows VPS Blog\",\"isPartOf\":{\"@id\":\"https:\/\/windows-vps.org\/blog\/#website\"},\"datePublished\":\"2026-08-03T23:12:55+00:00\",\"dateModified\":\"2026-10-03T22:07:10+00:00\",\"author\":{\"@id\":\"https:\/\/windows-vps.org\/blog\/#\/schema\/person\/44caceed916d0db318aa08d5623a7a58\"},\"description\":\"Windows Server 2022 and 2025 ship with TLS 1.2 enabled by default, but many hardened VPS images still have legacy protocol bits turned on, and TLS 1.3\",\"breadcrumb\":{\"@id\":\"https:\/\/windows-vps.org\/blog\/enable-tls-12-tls-13-system-wide-windows-vps\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/windows-vps.org\/blog\/enable-tls-12-tls-13-system-wide-windows-vps\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/windows-vps.org\/blog\/enable-tls-12-tls-13-system-wide-windows-vps\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/windows-vps.org\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Enable TLS 1.2 and TLS 1.3 System-Wide on a Windows VPS: Schannel Registry Settings and Verification\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/windows-vps.org\/blog\/#website\",\"url\":\"https:\/\/windows-vps.org\/blog\/\",\"name\":\"Windows VPS Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/windows-vps.org\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/windows-vps.org\/blog\/#\/schema\/person\/44caceed916d0db318aa08d5623a7a58\",\"name\":\"windows-vps\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/windows-vps.org\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/3f2573db5afcd1a6ab9abcc5d48fc8e42584bc87ab9d98cc156e5b2097766dd9?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/3f2573db5afcd1a6ab9abcc5d48fc8e42584bc87ab9d98cc156e5b2097766dd9?s=96&d=mm&r=g\",\"caption\":\"windows-vps\"},\"sameAs\":[\"https:\/\/windows-vps.org\/blog\",\"https:\/\/x.com\/myxiechengxuan\"],\"url\":\"https:\/\/windows-vps.org\/blog\/author\/myxiechengxuan\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Enable TLS 1.2 and TLS 1.3 System-Wide on a Windows VPS: Schannel Registry Settings and Verification - Windows VPS Blog","description":"Windows Server 2022 and 2025 ship with TLS 1.2 enabled by default, but many hardened VPS images still have legacy protocol bits turned on, and TLS 1.3","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/windows-vps.org\/blog\/enable-tls-12-tls-13-system-wide-windows-vps\/","og_locale":"en_US","og_type":"article","og_title":"Enable TLS 1.2 and TLS 1.3 System-Wide on a Windows VPS: Schannel Registry Settings and Verification","og_description":"Enable TLS 1.2 and TLS 1.3 System-Wide on a Windows VPS: Schannel Registry Settings and Verification","og_url":"https:\/\/windows-vps.org\/blog\/enable-tls-12-tls-13-system-wide-windows-vps\/","og_site_name":"Windows VPS Blog","article_published_time":"2026-08-03T23:12:55+00:00","article_modified_time":"2026-10-03T22:07:10+00:00","author":"windows-vps","twitter_card":"summary_large_image","twitter_creator":"@myxiechengxuan","twitter_misc":{"Written by":"windows-vps","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/windows-vps.org\/blog\/enable-tls-12-tls-13-system-wide-windows-vps\/","url":"https:\/\/windows-vps.org\/blog\/enable-tls-12-tls-13-system-wide-windows-vps\/","name":"Enable TLS 1.2 and TLS 1.3 System-Wide on a Windows VPS: Schannel Registry Settings and Verification - Windows VPS Blog","isPartOf":{"@id":"https:\/\/windows-vps.org\/blog\/#website"},"datePublished":"2026-08-03T23:12:55+00:00","dateModified":"2026-10-03T22:07:10+00:00","author":{"@id":"https:\/\/windows-vps.org\/blog\/#\/schema\/person\/44caceed916d0db318aa08d5623a7a58"},"description":"Windows Server 2022 and 2025 ship with TLS 1.2 enabled by default, but many hardened VPS images still have legacy protocol bits turned on, and TLS 1.3","breadcrumb":{"@id":"https:\/\/windows-vps.org\/blog\/enable-tls-12-tls-13-system-wide-windows-vps\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/windows-vps.org\/blog\/enable-tls-12-tls-13-system-wide-windows-vps\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/windows-vps.org\/blog\/enable-tls-12-tls-13-system-wide-windows-vps\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/windows-vps.org\/blog\/"},{"@type":"ListItem","position":2,"name":"Enable TLS 1.2 and TLS 1.3 System-Wide on a Windows VPS: Schannel Registry Settings and Verification"}]},{"@type":"WebSite","@id":"https:\/\/windows-vps.org\/blog\/#website","url":"https:\/\/windows-vps.org\/blog\/","name":"Windows VPS Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/windows-vps.org\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/windows-vps.org\/blog\/#\/schema\/person\/44caceed916d0db318aa08d5623a7a58","name":"windows-vps","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/windows-vps.org\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/3f2573db5afcd1a6ab9abcc5d48fc8e42584bc87ab9d98cc156e5b2097766dd9?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/3f2573db5afcd1a6ab9abcc5d48fc8e42584bc87ab9d98cc156e5b2097766dd9?s=96&d=mm&r=g","caption":"windows-vps"},"sameAs":["https:\/\/windows-vps.org\/blog","https:\/\/x.com\/myxiechengxuan"],"url":"https:\/\/windows-vps.org\/blog\/author\/myxiechengxuan\/"}]}},"_links":{"self":[{"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/posts\/537","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/comments?post=537"}],"version-history":[{"count":2,"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/posts\/537\/revisions"}],"predecessor-version":[{"id":825,"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/posts\/537\/revisions\/825"}],"wp:attachment":[{"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/media?parent=537"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/categories?post=537"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/tags?post=537"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}