SSL certificate checker
Check that a site's certificate is valid, trusted by browsers and nowhere near its expiry date.
Results for github.com
Secure
Valid and trusted
github.com has a valid certificate from Sectigo Public Server Authentication CA DV E36 that browsers trust. It runs for another 74 days.
2027-01-27 · 90-day certificate
Each certificate is signed by the next, up to a root your browser already trusts.
TLS AES 128 GCM SHA256
Sectigo Public Server Authentication CA DV E36
github.com, www.github.com
Certificate
- Subject
- github.com
- Issuer
- Sectigo Public Server Authentication CA DV E36
- Valid from
- Valid until
- (in 74 days)
- Public key
EC 256- Signature
ecdsa-with-SHA256- Serial number
3E1D6026B4B0AEA279DCA2EFBBCED82B- SHA-256 fingerprint
7D:C4:D8:5C:F1:E3:10:97:12:25:BC:9A:92:57:67:90:43:A2:43:D7:0A:3C:C2:A9:1C:C5:D3:89:89:2C:27:76
Connection
- Host
- github.com:443
- Address
140.82.121.3- Protocol
TLS 1.3- Cipher
TLS_AES_128_GCM_SHA256- ALPN
h2- OCSP stapling
- No
Names2
Names this certificate covers. A browser accepts it only for these.
github.comwww.github.com
Chain4
| # | Role | Subject | Issuer | Valid until |
|---|---|---|---|---|
| 1 | Leaf | github.com | Sectigo Public Server Authentication CA DV E36 | |
| 2 | Intermediate | Sectigo Public Server Authentication CA DV E36 | Sectigo Public Server Authentication Root E46 | |
| 3 | Intermediate | Sectigo Public Server Authentication Root E46 | USERTrust ECC Certification Authority | |
| 4 | Root (from the trust store) | USERTrust ECC Certification Authority | USERTrust ECC Certification Authority |
Structured result (JSON) · 3.5 KB
{
"host": "github.com",
"port": 443,
"ip": "140.82.121.3",
"verdict": "valid",
"valid": true,
"authorized": true,
"hostnameMatch": true,
"chain": [
{
"subject": {
"CN": "github.com"
},
"issuer": {
"C": "GB",
"O": "Sectigo Limited",
"CN": "Sectigo Public Server Authentication CA DV E36"
},
"san": [
"github.com",
"www.github.com"
],
"validFrom": "2026-10-30T00:00:00.000Z",
"validTo": "2027-01-27T23:59:59.000Z",
"serialNumber": "3E1D6026B4B0AEA279DCA2EFBBCED82B",
"fingerprint256": "7D:C4:D8:5C:F1:E3:10:97:12:25:BC:9A:92:57:67:90:43:A2:43:D7:0A:3C:C2:A9:1C:C5:D3:89:89:2C:27:76",
"keyType": "EC",
"keyBits": 256,
"signatureAlgorithm": "ecdsa-with-SHA256",
"isCA": false,
"selfSigned": false
},
{
"subject": {
"C": "GB",
"O": "Sectigo Limited",
"CN": "Sectigo Public Server Authentication CA DV E36"
},
"issuer": {
"C": "GB",
"O": "Sectigo Limited",
"CN": "Sectigo Public Server Authentication Root E46"
},
"san": [],
"validFrom": "2021-03-22T00:00:00.000Z",
"validTo": "2036-03-21T23:59:59.000Z",
"serialNumber": "36E059ED888DD57AEDD570B6727F9BDA",
"fingerprint256": "87:3F:0B:A8:0E:3A:C2:22:65:6D:FD:04:15:8C:C1:5C:29:27:D4:2D:5D:05:F0:1D:EE:4A:47:EB:43:A9:16:DF",
"keyType": "EC",
"keyBits": 256,
"signatureAlgorithm": "ecdsa-with-SHA384",
"isCA": true,
"selfSigned": false
},
{
"subject": {
"C": "GB",
"O": "Sectigo Limited",
"CN": "Sectigo Public Server Authentication Root E46"
},
"issuer": {
"C": "US",
"ST": "New Jersey",
"L": "Jersey City",
"O": "The USERTRUST Network",
"CN": "USERTrust ECC Certification Authority"
},
"san": [],
"validFrom": "2021-03-22T00:00:00.000Z",
"validTo": "2038-01-18T23:59:59.000Z",
"serialNumber": "1A9EAFEC6DE8E19B5C193141B68D90DD",
"fingerprint256": "EA:6B:89:ED:69:07:A2:09:FF:91:88:67:6F:B1:64:E7:AC:ED:89:4B:89:96:DF:BE:5C:E5:BB:CC:22:DE:4D:DD",
"keyType": "EC",
"keyBits": 384,
"signatureAlgorithm": "ecdsa-with-SHA384",
"isCA": true,
"selfSigned": false
},
{
"subject": {
"C": "US",
"ST": "New Jersey",
"L": "Jersey City",
"O": "The USERTRUST Network",
"CN": "USERTrust ECC Certification Authority"
},
"issuer": {
"C": "US",
"ST": "New Jersey",
"L": "Jersey City",
"O": "The USERTRUST Network",
"CN": "USERTrust ECC Certification Authority"
},
"san": [],
"validFrom": "2010-02-01T00:00:00.000Z",
"validTo": "2038-01-18T23:59:59.000Z",
"serialNumber": "5C8B99C55A94C5D27156DECD8980CC26",
"fingerprint256": "4F:F4:60:D5:4B:9C:86:DA:BF:BC:FC:57:12:E0:40:0D:2B:ED:3F:BC:4D:4F:BD:AA:86:E0:6A:DC:D2:A9:AD:7A",
"keyType": "EC",
"keyBits": 384,
"signatureAlgorithm": "ecdsa-with-SHA384",
"isCA": true,
"selfSigned": true,
"trustAnchor": true
}
],
"issues": [],
"checkedAt": "2026-11-14T17:43:29.557Z",
"ms": 44,
"expiresAt": "2027-01-27T23:59:59.000Z",
"daysToExpiry": 74,
"issuedAt": "2026-10-30T00:00:00.000Z",
"lifetimeDays": 90,
"subject": "github.com",
"issuer": "Sectigo Public Server Authentication CA DV E36",
"protocol": "TLSv1.3",
"cipher": "TLS_AES_128_GCM_SHA256",
"alpn": "h2",
"ocspStapled": false
}What the SSL checker reports
When a browser opens an HTTPS site, the server presents a certificate to prove its identity. The checker connects to the server the same way and completes the TLS handshake, then reports what came back: who the certificate was issued to, which names it covers, who issued it, when it is valid, the chain up to the root, and the TLS version and cipher in use. It sends nothing after the handshake, so no page is requested.
| Field | What it tells you |
|---|---|
| Subject and SANs | The subject alternative names: the names the certificate is valid for. The hostname you visit must be on the list (a wildcard such as *.example.com covers one level). |
| Issuer | The certificate authority (CA) that signed it. |
| Valid from / until | The window in which it is valid, plus the days left. |
| Chain | The leaf certificate and the intermediates the server sends. Browsers need them to link the leaf to a trusted root. |
| Key and signature | The key type and size (RSA 2048, ECDSA P-256) and the signing algorithm. |
| Protocol and cipher | The TLS version negotiated (TLS 1.2 or 1.3) and the cipher suite. A server stuck on TLS 1.0 or 1.1 is flagged as outdated. |
| ALPN | The application protocol the server picked, where h2 means HTTP/2. LookupOwl asks for it on ports 443, 8443 and 853. |
| OCSP stapling | OCSP is how a CA reports whether a certificate has been revoked. Stapling means the server attaches a recent answer to the handshake. |
| Trust and name match | Whether the chain verifies against trusted roots, and whether the certificate covers the name you entered. |
How to use it
- Enter the hostType
example.com, paste a URL, or add a port, as inmail.example.com:993. The default is 443, and 8443 works for a web server on an alternate port. Public IP addresses work as well, and the last question below lists the mail, LDAP and DNS-over-TLS ports. - Read the verdictThe headline reads Valid and trusted, Expires in N days (30 or fewer left), Expired N days ago, Not valid yet, Self-signed certificate, Browsers won't trust this, Certificate is for a different name, or Only supports outdated TLS. A list of problems follows, most with a suggested fix.
- Open the detailsIf something fails, the Chain tab lists each certificate with its issuer and expiry date, so you can see where a link is missing or has expired. The other tabs show the certificate itself, the connection and the names it covers.
Common certificate errors, decoded
| Problem | What it means | Fix |
|---|---|---|
| Expired | The valid-until date is in the past (Chrome shows NET::ERR_CERT_DATE_INVALID). | Renew and install the new certificate, then check your automation. See the expiry checker. |
| Name mismatch | The hostname is not in the certificate's SAN list (Chrome shows ERR_CERT_COMMON_NAME_INVALID). | Reissue with the right names, or point the name at the right server. |
| Incomplete chain | The server did not send an intermediate certificate that links yours to a trusted root. | Install the full chain: your certificate plus the intermediates, usually the fullchain.pem file. |
| Untrusted or self-signed | The root is not in the client's trust store. | Use a public CA for public sites, or install your private root on clients. |
| Wrong certificate on some IPs | Different servers behind one name present different certificates. | Make every server or load balancer use the same certificate. |
| Only outdated TLS | The server refuses TLS 1.2 and 1.3 and only speaks TLS 1.0 or 1.1. Every current browser needs TLS 1.2 or newer (RFC 8996). | Enable TLS 1.2 and 1.3 on the server, load balancer or CDN and turn off the old versions. If the software is too old for TLS 1.2, update it or put a CDN or proxy in front. |
| Weak key or signature | An RSA key under 2048 bits, or a SHA-1 signature. | Reissue with an RSA 2048 or ECDSA P-256 key and a SHA-256 signature. |
| Lifetime above the limit | The certificate is trusted but valid for longer than the CA/Browser Forum allows: over 398 days, or over 200 days if issued since 15 March 2026. | Unusual from a public CA, so check where it came from. The limit falls to 100 days on 15 March 2027 and 47 days on 15 March 2029, as the expiry checker page explains. |
- Works in my browser, fails in curl or an API client. Suspect an incomplete chain first, since browsers can fetch a missing intermediate and many libraries cannot.
- SNI matters. Servers hosting many sites choose a certificate from the name the client sends (SNI). The checker sends the name you entered, as browsers do. For an IP address it sends no name, so the server shows its default certificate.
- Old TLS versions. LookupOwl connects with TLS 1.2 or 1.3 first. If a server refuses both, it makes one more attempt that can only use TLS 1.0 or 1.1, just to learn which version the server speaks and read its certificate. You then see “Only supports outdated TLS”, with the dates and names from that certificate. The chain is not checked for trust over that connection, and the result is never a pass. Enable TLS 1.2 and 1.3 on the server, then check again. If even the older attempt fails, you get a short message saying the server refused every version we can speak, instead.
- Revocation is not the same as expiry. A revoked certificate can still look valid by date. The checker reports whether the server stapled an OCSP response, but it does not ask the CA about revocation. Some CAs, such as Let's Encrypt, have stopped running OCSP, so “No” under OCSP stapling is normal for their certificates.
- Trust follows one root list. The verdict uses the public root certificates bundled with LookupOwl's software (the Mozilla list). Chrome, Apple and Microsoft keep their own lists, so a rare certificate can be trusted by one and not another.
Installation problems to look for
- The certificate is on the web server but not on the CDN or load balancer. The public name ends its TLS at whichever layer answers first.
- Renewed but still serving the old certificate. The service needs a reload or restart, or there are several nodes and one was missed.
- Only the bare domain is covered. A certificate for
example.comdoes not automatically coverwww.example.com. List both names in the SANs. - Wildcard expectations.
*.example.comcoversshop.example.com, but notexample.comora.b.example.com. - Forgotten services. Mail servers (SMTPS 465, IMAPS 993), LDAPS and DNS-over-TLS endpoints have certificates too, and they expire just as quietly.
- Internal names. The checker only reaches public hosts. Private, loopback and internal names, and single-word names like
intranet, are refused.
How the check works
LookupOwl looks up the host, checks that every address is public, connects to one of them on the port you chose and completes a TLS handshake. It sends the server the name you entered (SNI) and, on ports 443 and 8443, offers HTTP/2 and HTTP/1.1 (ALPN). On port 587 it first asks the mail server to switch to TLS with STARTTLS. It records the certificate chain, the protocol, the cipher and whether a stapled OCSP response arrived, then hangs up. If the server refuses TLS 1.2 and 1.3, one more attempt that can only use TLS 1.0 or 1.1 reads the certificate and the version, and that result is marked unverified. The trust and name checks are done by the TLS library itself, against its bundled roots. A handshake gets about nine seconds, fresh checks of any one host are limited to 20 a minute across all callers, and results are cached for up to ten minutes. Check again fetches a fresh one.
# The same thing with OpenSSL
openssl s_client -connect example.com:443 -servername example.com -showcerts </dev/null
# Just the dates
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -dates -issuer -subjectStandards
- RFC 5280: the X.509 certificate and path validation profile. RFC 9525: service identity checks (replaces RFC 6125).
- RFC 8446 and RFC 5246: TLS 1.3 and 1.2. RFC 8996: deprecation of TLS 1.0 and 1.1.
- RFC 6066: Server Name Indication, and the certificate status request behind OCSP stapling. RFC 7301: ALPN. RFC 3207: STARTTLS for SMTP.
- RFC 6960: the Online Certificate Status Protocol (OCSP).
- CA/Browser Forum Baseline Requirements: the rules public CAs follow, including certificate lifetimes.
Questions people ask
How do I check an SSL certificate?
Enter the hostname above. The checker connects the way a browser does, then shows the certificate, its dates, the chain and any problems found, with a suggested fix for most. Add a port, as in mail.example.com:993, to check a mail server or another TLS service.
What is an incomplete certificate chain?
It means the server sent its own certificate but not the intermediate certificates that connect it to a trusted root. Some browsers recover by fetching the missing link, but many apps, libraries and mail servers do not, so the site works for you and fails for others.
Why does it say the name does not match?
Because the hostname you entered is not in the certificate's subject alternative names. Either the certificate was issued for different names, or the DNS record points to the wrong server. Check the Names tab to see which names the certificate does cover.
Why does my browser show a warning when the checker says the certificate is valid?
The cause is probably on your side or on another server. Check your device's clock, security software that inspects HTTPS, and any cached warning in the browser. Large sites also use many servers, so yours may be answering with a different certificate than the one LookupOwl reached. The Connection tab shows which address was checked.
Is a certificate from Let's Encrypt as good as a paid one?
For encryption and browser trust, yes. A free Let's Encrypt certificate protects traffic as strongly as a paid one. Paid certificates differ in support, warranty and validation type, not in the strength of the encryption. Let's Encrypt certificates are short-lived, so automatic renewal matters more.
Does this check TLS versions and ciphers?
It reports the version and cipher negotiated in this one connection, and it tells you when a server refuses TLS 1.2 and 1.3 and only speaks TLS 1.0 or 1.1. That is not a full configuration audit, because it does not list every protocol and cipher suite the server supports. For that you need a dedicated TLS scanner, which tries each version and cipher in turn.
Can I check a non-HTTPS service?
Yes, on the supported ports. Services that use TLS from the first byte work on 465 (SMTPS), 993 (IMAPS), 995 (POP3S), 636 (LDAPS) and 853 (DNS-over-TLS). On 587 (SMTP submission) the checker asks for STARTTLS before the handshake. Other STARTTLS services, such as IMAP on 143, are not supported.
Is anything stored about the sites I check?
Not in our routine server logs, which do not record the names you look up. Results are held in memory for up to ten minutes so repeat checks are quick. On the website, Google Analytics does see what you look up. The privacy policy lists exactly what is collected.
Use it from AI, the API or the command line
Every LookupOwl tool is also a free API and an MCP tool, with no key and no account. This one is ssl_check. Please be kind to the rate limits.
curl "https://lookupowl.com/api/v1/tools/ssl-checker?q=example.com"claude mcp add --transport http lookupowl https://lookupowl.com/mcp