dotvitals

Loading the list of pages…

↑↓ to moveEnter to openEsc to close

SSL 3.0 is enabled

Updated

CriticalConfirmedtls.protocols.sslv3-enabled

What this check looks for

The server accepts SSL 3.0, which has been formally prohibited since 2015 and can be attacked to reveal parts of an encrypted session.

Why it matters

POODLE lets an attacker who can sit between a visitor and the site recover secrets such as session cookies, one byte at a time. Leaving SSL 3.0 available is what makes the downgrade to it possible.

When the check passes, your report says: “The server refuses SSL 3.0”.

What it costs your score

When this check fails it removes 50 points from your TLS score, before the status, confidence and repeat multipliers are applied. TLS carries a weight of 15 in the overall score.

It shares the tls.protocols family ceiling of 40 points: however many findings that family produces, together they cannot remove more than that from TLS. One underlying problem showing up in several places is still one problem.

Severity
critical
Default confidence
confirmed
Status when triggered
fail
Deduction
50 points
Family cap
tls.protocols · 40
Category
TLS
Module
Tls protocols
Fix owned by
user
In the ruleset since
2026.09

How the whole score is calculated

How to fix it

Disable SSL 3.0.

POODLE is unfixable inside the protocol; the only remedy is to stop offering it.

  1. Set the protocol list to TLS 1.2 and 1.3 only, in the server-wide context so no virtual host keeps an older list: ssl_protocols TLSv1.2 TLSv1.3; in nginx's http block, SSLProtocol -all +TLSv1.2 +TLSv1.3 in Apache's main configuration.

  2. On IIS, disable SSL 3.0 under the Schannel Protocols registry keys and restart the server; Schannel reads them only at start-up.

  3. If a load balancer, CDN or appliance terminates TLS in front of the server, change it there as well — the scan measured whatever answered for this hostname.

  4. Reload or restart, then test again. A configuration test alone applies nothing.

How to confirm it worked

  • openssl s_client -connect ‹host›:443 -ssl3 </dev/null 2>&1 | tail -1 — expect a failure

  • If your openssl rejects -ssl3 as an unknown option, it was built without SSL 3.0 and cannot test for it; run nmap --script ssl-enum-ciphers -p 443 ‹host› instead and confirm SSLv3 is not listed.

A named slot like ‹domain› — and the braces left in the configuration below — is filled in with your own values when this rule appears on a report.

Remediation by platform

nginx
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
Apache
SSLProtocol             -all +TLSv1.2 +TLSv1.3
SSLHonorCipherOrder     off
SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305
Caddy
‹host› {
	tls {
		protocols tls1.2 tls1.3
	}
}
Cloudflare
SSL/TLS → Edge Certificates → Minimum TLS Version → TLS 1.2.
  • Put this in the http block so it applies to every server block; a per-server ssl_protocols directive silently overrides it for that server only.

  • Set it in the main configuration, not in .htaccess — SSLProtocol is a server-context directive and .htaccess cannot change it.

  • Caddy already defaults to TLS 1.2 and 1.3; an explicit block is only needed to pin them.

  • This setting governs the connection between visitors and Cloudflare's edge only. It does not change what the origin server negotiates, and an origin that is reachable directly — by IP, or through any DNS record that is not proxied — still accepts what it accepted before. This scan measured the origin, so apply the server-side configuration as well.

Technical detail

An SSL 3.0 handshake succeeded against ‹host›. ‹source›. CVE-2014-3566 (POODLE) exploits SSL 3.0's non-deterministic CBC padding, which cannot be fixed within the protocol — RFC 7568 prohibits SSL 3.0 rather than patching it. TLS_FALLBACK_SCSV limits the downgrade path but is not a substitute for disabling the protocol.

No browser released in the last decade will negotiate SSL 3.0, so switching it off costs no visitors. A server that still accepts it is usually running a configuration written before 2015 and never revisited, an old load balancer or appliance, or an older Windows Server whose Schannel defaults were never changed. nginx has left SSL 3.0 out of its defaults since 1.9.1, so on nginx the usual culprit is an explicit ssl_protocols line naming SSLv3 — search every included file, not only the main one.

The same certificate is often served on more than one listener. A mail server, an admin console or a second virtual host can keep accepting SSL 3.0 after the website is fixed, so check each of them too.

Standards and references

Test this on your domain

Run the check that produces this finding, on its own, against any domain.

Open the tls protocols checkerBuild the fix