Inspect any domain's TLS certificate from your terminal — validity, expiry, issuer, SANs, and revocation in one clean, color-coded summary.
Find a file
2026-05-29 23:08:58 +02:00
docs 📖 DOC: Merge embedded doc into CLAUDE.md; add README 2026-05-29 22:59:55 +02:00
scripts 📦 NEW: Add SVG render helper and just recipe 2026-05-29 22:59:55 +02:00
tests 👌 IMPROVE: Separate assessment from rendering 2026-05-29 23:08:58 +02:00
.gitignore 📦 NEW: Init uv project 2026-05-29 22:04:55 +02:00
.python-version 📦 NEW: Init uv project 2026-05-29 22:04:55 +02:00
checkcert.py 👌 IMPROVE: Separate assessment from rendering 2026-05-29 23:08:58 +02:00
CLAUDE.md 📖 DOC: Note the test-on-change discipline and just test 2026-05-29 23:08:58 +02:00
justfile 📦 NEW: Add SVG render helper and just recipe 2026-05-29 22:59:55 +02:00
pyproject.toml 📦 NEW: Set up uv project with pytest 2026-05-29 22:08:10 +02:00
README.md 📖 DOC: Merge embedded doc into CLAUDE.md; add README 2026-05-29 22:59:55 +02:00
uv.lock 📦 NEW: Set up uv project with pytest 2026-05-29 22:08:10 +02:00

checkcert

A small CLI that inspects a domain's TLS certificate and prints a clean, color-coded summary — validity, expiry (with a countdown), issuer, the names it covers (CN + SANs), and live revocation status (OCSP stapling / OCSP / CRL). -v adds full identity, X.509 extensions, and fingerprints.

checkcert inspecting a revoked Let's Encrypt test certificate

Above: the cert chains fine (✓ Valid) but checkcert catches that it has been revoked via its CRL.

checkcert github.com
checkcert revoked-isrgrootx1.letsencrypt.org
checkcert -v cloudflare.com

A bare hostname is assumed to be HTTPS on port 443; an explicit port is honored.

Requirements

  • Python 3.13+
  • The openssl CLI on your PATH (used for details the Python ssl module doesn't expose). Without it, the core summary still works but some fields show an error.

Install

It's a single self-contained script — symlink it onto your PATH:

ln -s "$PWD/checkcert.py" ~/.local/bin/checkcert

Development

See CLAUDE.md for design notes and conventions. Run the tests with:

just test          # or: uv run pytest