How to Disable TLS 1.0 and 1.1: Apache, Nginx & IIS Configuration

Knowing TLS 1.0 and 1.1 should be disabled and actually disabling them are two different problems — the setting lives in a different place on every web server, and it's easy to change the wrong config file and see no effect at all. Here are the exact directives for Apache, Nginx, and IIS, plus how to confirm the change actually took.

Why This Still Needs to Be Done Manually

TLS 1.0 and 1.1 have been formally deprecated for years — major browsers stopped supporting them, PCI DSS requires their removal for payment-handling systems, and the IETF officially deprecated both in RFC 8996. None of that automatically changes what your server actually accepts. Unless a server's TLS configuration is explicitly updated, many still happily negotiate TLS 1.0 or 1.1 with any client that asks for it, especially on systems that have been running the same configuration for years without a full rebuild.

The three most common web servers each store this setting in a completely different place, using different syntax, which is the main reason this task trips people up — not the concept, but finding and correctly editing the right file or registry key.

💡
ToolsNovaHub Pro Tip
Change one server at a time and verify immediately after each restart, rather than pushing the same config change across your entire fleet at once. A typo in an SSLProtocol or ssl_protocols line can take down HTTPS entirely on that server, and catching it on one machine before it reaches the rest of your infrastructure saves a much worse outage.
⚠️
Common Beginner Mistake
Editing the TLS protocol setting in one config file, restarting, and declaring victory — without checking whether a second included config, a virtual host override, or a load balancer sitting in front of the server is applying its own, different setting. The live behavior is whatever the last-applied configuration says, not whatever any single file says.

Confirming What's Currently Enabled

Before changing anything, confirm what your server currently accepts, so you have a clear before-and-after comparison. The SSL Certificate Checker generates ready-to-run openssl commands for exactly this — one command per TLS version, showing which ones your server currently accepts or rejects. Run that check first, make your configuration change, then run it again afterward to confirm the change actually took effect.

Disabling TLS 1.0 and 1.1 on Apache

Apache's TLS version control lives in mod_ssl, via the SSLProtocol directive, typically set in the virtual host block or a global SSL config file (commonly /etc/apache2/mods-available/ssl.conf or /etc/httpd/conf.d/ssl.conf depending on distribution).

FileDirective
ssl.conf or virtual host blockSSLProtocol -all +TLSv1.2 +TLSv1.3

The -all disables every protocol version first, and the + entries re-enable only the ones you want — an explicit allowlist is safer than trying to individually disable just TLS 1.0 and 1.1, since it won't silently re-allow some future deprecated version by omission. After saving, reload or restart Apache (apachectl configtest first to catch syntax errors, then systemctl restart apache2 or httpd depending on your distribution).

Disabling TLS 1.0 and 1.1 on Nginx

Nginx uses the ssl_protocols directive, set inside the server block or a shared SSL config include (commonly under /etc/nginx/sites-available/ or a dedicated ssl-params.conf snippet).

FileDirective
server block or ssl config includessl_protocols TLSv1.2 TLSv1.3;

Unlike Apache's allow/deny syntax, Nginx's ssl_protocols is a simple allowlist — only the versions listed are accepted, so TLS 1.0 and 1.1 are disabled by omission. Test the configuration syntax with nginx -t before reloading, then apply with systemctl reload nginx (a reload rather than a full restart is usually sufficient for Nginx and avoids dropping active connections).

Disabling TLS 1.0 and 1.1 on IIS

IIS doesn't use a web-server-level config file for this — the setting lives in the Windows registry, under the SCHANNEL provider's protocol keys, and applies at the operating system level rather than per-site.

Registry path
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0 and the equivalent TLS 1.1 key, each containing Client and Server subkeys.
Value to set
Under both the Client and Server subkeys for each protocol version, create or set a DWORD named Enabled to 0, and a DWORD named DisabledByDefault to 1.
GUI alternative
IIS Crypto, a free third-party tool, manages these same registry keys through a checkbox interface if editing the registry directly isn't preferred — it applies identical changes under the hood.

A full server restart is required afterward, since SCHANNEL protocol settings are read at boot, not dynamically — a service restart alone is not sufficient on IIS the way a config reload is on Apache or Nginx. Because these keys live under SecurityProviders rather than under IIS's own configuration, the same registry change also affects any other Windows service using SCHANNEL for TLS on that machine, not just IIS itself — worth keeping in mind on a server running more than one TLS-terminating service.

Apache vs Nginx vs IIS: Where the Setting Lives

ApacheNginxIIS
Setting locationConfig file (mod_ssl)Config fileWindows registry (SCHANNEL)
ScopePer virtual host (or global)Per server block (or global)Operating system level, not per-site
Apply methodReload or restartReloadFull server restart required

Verifying the Change Actually Took Effect

The only reliable verification is attempting an actual connection using each specific protocol version and confirming the handshake fails for TLS 1.0 and 1.1 while still succeeding for TLS 1.2 and 1.3:

TLS 1.0 test — should fail
openssl s_client -connect yourdomain.com:443 -tls1
TLS 1.1 test — should fail
openssl s_client -connect yourdomain.com:443 -tls1_1
TLS 1.2 test — should succeed
openssl s_client -connect yourdomain.com:443 -tls1_2

A failed handshake typically shows a handshake failure or connection reset message rather than a certificate chain — that failure is the expected, correct outcome for the disabled versions.

Common Reasons TLS 1.0 Still Shows Enabled After the Change

A second config file overriding the first
A separate included snippet, a default virtual host, or a leftover config from before a migration can apply its own SSLProtocol or ssl_protocols setting that takes precedence over the one you edited.
A load balancer or CDN terminating TLS separately
If TLS is terminated at a CDN or load balancer in front of your actual server, that layer has its own, independently configured protocol settings — changing your origin server's config has no effect on what the public-facing connection accepts.
The service wasn't actually restarted
A config file edit with no corresponding reload or restart simply hasn't taken effect yet, and on IIS specifically, a service restart isn't enough — the full server needs to restart for SCHANNEL changes to apply.

When a fix genuinely doesn't seem to take effect, it's worth checking each of these in order rather than re-editing the same file repeatedly — re-editing a file that isn't actually the one in effect changes nothing no matter how many times it's repeated, and the wasted cycles usually trace back to one of these three causes rather than a mistake in the directive syntax itself.

Will Disabling TLS 1.0 and 1.1 Break Anything?

For a typical public website with general consumer traffic in 2026, the population of visitors still using clients unable to negotiate TLS 1.2 is negligible — modern browsers have supported TLS 1.2 for years. The population worth actually checking before disabling is internal or B2B: older internal tools, legacy payment terminals, embedded devices, or integration partners running outdated software stacks that haven't been updated. For those systems, confirm the specific client's TLS capability before rolling out the change broadly, since an internal tool failing silently can go unnoticed far longer than a public-facing outage would.

Real-World Scenarios

A PCI DSS compliance audit
A payment-processing company fails a compliance scan specifically for accepting TLS 1.0, and needs the exact SSLProtocol change applied across every server handling cardholder data before the next audit cycle.
A security review flagging legacy protocol support
An internal security team runs a scan across the company's server fleet and finds several older Nginx instances still accepting TLS 1.1 because they were provisioned before the current hardening baseline existed.
An IIS server inherited from a previous admin
A new sysadmin taking over Windows Server infrastructure discovers TLS 1.0 is still enabled at the OS level and needs to apply the SCHANNEL registry change without disrupting the handful of legitimate legacy integrations still in use.

Rollout Checklist

  1. Confirm current TLS version support with a live check before making any change.
  2. Identify every config file or included snippet that could set the protocol version, not just the first one found.
  3. Apply the change on one server first, test connections with actual protocol version flags, then roll out further.
  4. Restart or reload appropriately — Apache and Nginx accept a reload, IIS requires a full restart.
  5. Re-verify with the same live check used at the start, confirming TLS 1.0/1.1 now fail and TLS 1.2/1.3 still succeed.
  6. If any legacy internal system depends on the old versions, coordinate its upgrade before disabling broadly rather than after something breaks.

Summary

Disabling TLS 1.0 and 1.1 is conceptually simple but operationally scattered — Apache's SSLProtocol, Nginx's ssl_protocols, and IIS's SCHANNEL registry keys are three unrelated mechanisms doing the same job, each with its own syntax and its own restart requirement. The actual risk in this task isn't the disabling itself; it's a second config file, a front-end load balancer, or a missed restart silently leaving the old versions enabled despite the change looking correct on paper — which is exactly why verifying with a live protocol-specific connection test, before and after, matters more than the edit itself.

Frequently Asked Questions

Many servers, especially ones running older OS or web server versions, still accept TLS 1.0 and 1.1 by default unless the configuration is explicitly changed, even though both versions have been formally deprecated by browsers, PCI DSS, and the IETF.
The SSLProtocol directive in mod_ssl, set to something like 'SSLProtocol -all +TLSv1.2 +TLSv1.3', which explicitly disables everything and re-enables only the listed versions.
The ssl_protocols directive, set to list only the versions you want to allow, such as 'ssl_protocols TLSv1.2 TLSv1.3;' — any version not listed is disabled.
Through the Windows registry, under the SCHANNEL Protocols keys for TLS 1.0 and TLS 1.1, setting the Enabled DWORD value to 0 for both client and server subkeys, followed by a server restart — or using a tool like IIS Crypto to manage the same registry keys through a GUI.
Yes. Apache and Nginx both require a configuration reload or restart to apply SSLProtocol or ssl_protocols changes, and IIS requires a full server restart since the SCHANNEL settings are read at boot.
Attempt a connection specifying only that protocol version, such as openssl s_client -connect yourdomain.com:443 -tls1, and confirm the handshake fails rather than succeeds.
Common causes include a second config file or included snippet overriding the setting, a load balancer or CDN terminating TLS separately from the origin server, or the service not actually being restarted after the change.
Only for visitors on genuinely outdated clients — very old browser versions, old Android WebView, or legacy internal tools that haven't been updated. For a public website with general consumer traffic in 2026, this population is negligible; for internal enterprise tools connecting from older systems, verify client capability before disabling.
Full disabling is the standard recommendation today, since TLS 1.0 and 1.1 have known cryptographic weaknesses and are no longer considered a safe fallback even as a lower-priority option.
🛡️
Expert Tip
Keep a written record of exactly which file (or registry path) controls TLS versions on each of your servers — with three completely different mechanisms across Apache, Nginx, and IIS, this is one of the easiest settings to lose track of across a mixed infrastructure.
🔐
ToolsNovaHub Tool
Verify your current and post-change TLS version support with the SSL Certificate Checker's generated command set.

📋 Related Guides Comparison

ResourceTypeLink
SSL Certificate CheckerToolOpen Tool →
TLS/SSL Protocol & Certificate TypesGuideRead Guide →
What Is SSL?GuideRead Guide →
SMTP TLS vs SSLGuideRead Guide →
Explore All ToolsNovaHub Tools
🏠 Go to Homepage

🔗 More Guides