{% extends "base.html" %} {% import "tool_parts.html" as p %} {% block title %}{% if result %}SSL certificate for {{ result.host }}: {{ result.verdict }}{% else %}Free SSL certificate check{% endif %}{% endblock %} {% block desc %}{{ tool.desc }}{% endblock %} {% block content %} {{ p.head(tool) }} {{ p.form(tool, input_value, 'example.com') }} {{ p.error(error, url) }} {% if result %} {% set d = result.days_left %} {% call p.verdict((d ~ 'd') if (d is not none and result.verified) else result.verdict, result.verdict_class, result.verdict ~ (' · ' ~ d ~ ' days left' if d is not none else ''), ('Expires ' ~ result.not_after|dt) if result.not_after else 'No expiry date found', 'https://' ~ result.host ~ (':' ~ result.port if result.port != 443 else ''), checked_at) %}
Expiry date and days left, issuer, subject, every SAN, the negotiated TLS version and cipher, plus whether the chain is trusted, the hostname matches and the certificate is not self-signed or expired.
An expired or mismatched certificate shows a full-page browser warning and breaks API clients. Let's Encrypt certificates last 90 days, so a broken renewal cron goes unnoticed until it's too late.
puzaricloud.in · expired.badssl.com · self-signed.badssl.com