Every developer has seen an SSL grade — the A+ badge people screenshot, the C that shows up in a security review the week before an enterprise deal closes. But ask what the letter actually measures and most answers stop at "certificate stuff."
The letter is a compression of four or five independent properties of your TLS deployment, each with its own failure modes and its own fix. This post decompresses it: what's evaluated, what each deduction means, and why "the padlock shows up in Chrome" and "this deployment is well-configured" are very different statements.
Browsers show the padlock if your certificate is valid and the connection negotiated some acceptable encryption. That's a pass/fail check with a low bar. A grade asks harder questions: which protocol versions will you negotiate, which ciphers will you accept, is your certificate chain complete, will you protect users who type your domain without https://, and does the secure page quietly load insecure resources?
Two sites with identical padlocks can sit at opposite ends of the scale — one negotiating TLS 1.3 with modern ciphers and preloaded HSTS, the other still accepting TLS 1.0 with cipher suites deprecated a decade ago.
TLS versions are not increments; they're security eras.
The fix is usually one config block (or one CDN toggle): minimum version 1.2, enable 1.3. If your TLS terminates at Cloudflare, Vercel, or a load balancer, this is the provider's panel, not your code.
A cipher suite is the bundle of algorithms a connection uses for key exchange, encryption, and integrity. "Weak" isn't an insult; it's a category with specific members:
Forward secrecy (the ECDHE in modern suite names) deserves its own sentence: with ephemeral key exchange, each session gets throwaway keys, so an attacker who records your traffic today and steals your private key next year still can't decrypt the recordings. Without it, your private key is a skeleton key for all past captured traffic. Graders reward forward-secrecy-everywhere; TLS 1.3 makes it mandatory.
Like protocol versions, this is about what you accept: one legacy suite kept "for compatibility" with clients that no longer exist is a standing downgrade target.
Most TLS incidents aren't cryptographic; they're operational, and they're certificate-shaped:
curl, mobile apps, webhooks, monitoring probes, other people's backends calling your API — fail with trust errors. "Works in Chrome, fails in curl" is almost always an incomplete chain.www both, plus any API subdomains.Your perfect TLS config doesn't help the user who types yourdomain.com into the address bar: that first request goes out over plain HTTP, and an attacker on the path (public Wi-Fi is the classic venue) can intercept it and keep the victim on HTTP or hand them a different destination entirely — the SSL-stripping attack.
HSTS (Strict-Transport-Security) is the header that closes this: once a browser has seen it, it refuses to speak HTTP to your domain for max-age seconds, upgrading every request to HTTPS before it leaves the machine. Configuration has real gradations: a long max-age (six months minimum for credit), includeSubDomains so staging and API hosts inherit protection, and preload — shipping your domain in the browsers' built-in HSTS list so even the first-ever visit is protected. Preload + TLS 1.3 + clean ciphers is the classic A+ profile.
One honest caveat: preload is close to irreversible (removal takes months to propagate), so turn it on after includeSubDomains has baked without incident — not as day-one resume polish.
A perfectly configured HTTPS page that loads a script over http:// has reopened the door TLS closed: an attacker who can touch that one insecure request can inject into the secure page. Browsers block active mixed content (scripts, iframes) and increasingly upgrade or block passive content (images), but the result is broken pages, console warnings, and a padlock that downgrades. Mixed content is almost always a hardcoded http:// URL in a template or a database-stored asset link from the pre-HTTPS era — grep-able, fixable, and worth a deduction anywhere it appears because of how cheaply it undermines everything else.
Putting it together, the grades roughly mean:
The encouraging part: almost every deduction is a configuration change, not an engineering project. The discouraging part: they regress silently — a CDN migration resets your TLS posture to the provider's defaults, a new subdomain ships without HSTS, a certificate auto-renewal quietly stops. Which is why grading belongs in continuous scanning, not in an annual audit.
CheckVibe's SSL/TLS check computes the grade on every scan — protocol versions, cipher strength, forward secrecy, certificate validity and expiry runway via Certificate Transparency logs, HSTS policy, and mixed content — with a fix prompt per deduction, and the domain health check keeps watching certificate runway between scans. Run a free scan to see your letter and exactly which factor is capping it.
An A is a clean, modern deployment. The plus typically requires the refinements: TLS 1.3 support, forward secrecy across all accepted cipher suites, and a strong HSTS policy (long max-age, usually preloaded). None of them change the padlock; all of them change what an attacker on the network path can do.
Yes — with modern cipher suites (AEAD/GCM, ECDHE key exchange) TLS 1.2 remains the accepted secure baseline. The grade pressure is in two directions: stop accepting 1.0/1.1 (deprecated, downgrade surface) and add 1.3 (mandatory forward secrecy, faster handshake, smaller attack surface).
Almost always an incomplete certificate chain: your server sends only the leaf certificate and browsers silently fetch or cache the missing intermediate, while curl, mobile apps, and server-to-server clients don't. Serve the full chain (leaf + intermediates) and both will agree.
Eventually, yes — it protects even a user's first-ever visit, and it's part of the classic A+ profile. But it's effectively a one-way door (removal from browser preload lists takes months), so enable includeSubDomains first, run it long enough to confirm every subdomain works over HTTPS, then preload.
Continuously — the failure modes are silent and operational, not gradual. Certificates expire on a date, CDN migrations reset cipher and protocol settings to provider defaults, and new subdomains launch without HSTS. A scheduled scan that re-grades TLS and watches certificate expiry runway turns each of these from an outage into an email.
Paste your URL and get a security report in 30 seconds. 100+ automated checks with AI-powered fix prompts.
Scan your site freeRelated articles
How CSRF attacks work and how to prevent them. Covers CSRF tokens, SameSite cookies, custom headers, and framework-specific protection for Next.js, Express, and Django.
The 7 most dangerous JWT security mistakes developers make. Algorithm confusion, weak secrets, missing expiration, and more — with code examples showing how to fix each one.
AI code editors like Cursor, Copilot, and Windsurf help you ship fast — but they introduce real security gaps. Here are the specific vulnerabilities to find and fix before you deploy.