Skip to main content

Encryption finding · Edge

TLS 1.0 / TLS 1.1 Enabled: Fix It or Document It

Your scanner flagged TLS 1.0 or 1.1. What the finding means, how to disable both, and how to document it when a legacy system can't move to TLS 1.2.

What the scanner said

TLS Version 1.0 Protocol DetectionTLS Version 1.1 Protocol DeprecatedTLS 1.0 enabledTLS 1.1 enabled

Your server still accepts connections over TLS 1.0 or TLS 1.1. Nessus reports these as TLS Version 1.0 Protocol Detection (plugin 104743) and TLS Version 1.1 Protocol Deprecated (plugin 157288). Both protocol versions were retired by the IETF in RFC 8996 because they depend on cipher and hash designs that are no longer considered safe, and current clients no longer need them.

Why it matters

RFC 8996 (March 2021) moved TLS 1.0 and 1.1 to Historic status. NIST SP 800-52 Rev. 2 requires TLS 1.2 with support for TLS 1.3, prohibits TLS 1.0 on government-only systems, and discourages the older versions everywhere else.

PCI SSC guidance has treated SSL and TLS 1.0 as unacceptable for protecting cardholder data since its June 2018 migration deadline, so scanners and assessors both raise the finding.

The fix

Allow only TLS 1.2 and TLS 1.3 on every listener that terminates TLS: web servers, load balancers, CDNs, mail servers, and VPN gateways.

# nginx (TLSv1.3 needs nginx 1.13 or later built with OpenSSL 1.1.1 or later)
ssl_protocols TLSv1.2 TLSv1.3;

# Apache: works on every 2.4 release, including older builds without TLS 1.3
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1

# Windows Schannel: repeat both lines for "TLS 1.1", and for the Client key if this host makes outbound TLS calls, then reboot
reg add "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server" /v Enabled /t REG_DWORD /d 0 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server" /v DisabledByDefault /t REG_DWORD /d 1 /f

In nginx, when several server blocks share one address and port, the default server's ssl_protocols applies to all of them, so set it in the http block. On Apache, -all +TLSv1.2 +TLSv1.3 stops older builds from starting (before httpd 2.4.36 with OpenSSL 1.1.1, such as RHEL 7), which is why the line above subtracts the old versions instead.

On Windows Server 2008 R2, enable TLS 1.2 before you disable the older versions. .NET applications on older frameworks also need the SchUseStrongCrypto and SystemDefaultTlsVersions registry values, or they lose their outbound connections when TLS 1.0 goes away. On a managed load balancer or CDN, set the minimum TLS version to 1.2 or choose a security policy that starts there. The finding often sits on the load balancer in front of the application.

Verify. Run the check below against each listener.

nmap -sT -Pn --script ssl-enum-ciphers -p 443,465,587,993,995,3389 <host>

Use nmap 7.90 or later, which reports TLS 1.3. A fixed host prints no TLSv1.0: or TLSv1.1: section. A vulnerable host prints a TLSv1.0: or TLSv1.1: section. Rerun your scanner too, and keep the before and after output as the evidence that the finding is closed.

When you can't fix it

Some clients and devices cannot speak TLS 1.2: older payment terminals, industrial gateways, and appliances past vendor support. Your named owner chooses one treatment.

  • Remediate by upgrading or replacing the client or device, with a dated plan.
  • Mitigate by terminating TLS in front of the asset with a proxy that accepts TLS 1.2 or later from everyone else. If the legacy client must keep talking to something, give it its own segmented listener, restrict it to an allowlist of addresses, keep it off the internet, and monitor it.
  • Accept with documented compensating controls: the asset, why it can't change, the controls above, the owner, a review date, and a replacement date. For a PCI ASV scan, the routes are narrow: POS POI terminals verified as not susceptible to known exploits, or a dispute showing the protocol is present but not used as a security control. Outside PCI scans, the reviewer decides.

The post Compensating Controls for Legacy Systems covers which controls carry weight and how to write the record an assessor accepts.

Where it lands in the Risk Register

FindingTreatmentOwnerEvidence
TLS 1.0 / 1.1 accepted on a named listenerRemediate, mitigate, or accept (the owner decides)Named by youBefore and after scan output. Maps to PCI DSS 4.2.1 and NIST 800-53 SC-8 and SC-13.

Common questions

Which TLS versions should stay enabled?

TLS 1.2 and TLS 1.3. NIST SP 800-52 Rev. 2 requires TLS 1.2 with support for TLS 1.3. For government-only systems it prohibits TLS 1.0 and discourages 1.1, and it allows them on public-facing systems only where interoperability demands it. TLS 1.3 removes static RSA and Diffie-Hellman key exchange, so every full handshake is forward secret.

Will disabling TLS 1.0 and 1.1 break anything?

Only clients that cannot speak TLS 1.2, such as very old Java versions, Windows XP and Server 2003, and some embedded devices and payment terminals. Check your client inventory or the server's handshake logs before you change the listener.

Does a PCI scan fail on TLS 1.0?

Yes. Since June 30, 2018, PCI SSC guidance leaves two routes past the finding: point-of-sale POI (point-of-interaction) terminals verified as not susceptible to known SSL and early TLS exploits, along with the termination points they connect to, or an ASV dispute showing the protocol is present but not used as a security control. Otherwise, disable it.

How do I find out who still uses TLS 1.0 before I turn it off?

Log the negotiated protocol for a few weeks. In nginx, add $ssl_protocol to the access log format. In Apache, log %{SSL_PROTOCOL}x. On Windows, Schannel event logging and the IIS crypt-protocol log field show the same thing. The clients still on TLS 1.0 or 1.1 are your list to upgrade or segment.

Related reading

Need the finding closed, or documented so it stays open with your assessor's acceptance?