Halley / SSL Certificates Without the Drama

Created Sat, 31 May 2025 11:18:00 +0000 Modified Sun, 31 Aug 2025 22:17:24 +0000
279 Words

At some point, every self-hoster has woken up to expired certs.
The site’s down, the browser screams, and you’re manually copying PEM files at 2 a.m.

It doesn’t have to be like this.

Automate Early, Sleep Later

Manual renewal is a time bomb:

  • Human memory is unreliable
  • Cert lifetimes are shorter than ever
  • You will forget the one that matters most

Use ACME clients (like certbot, acme.sh) to auto-renew:

  • Schedule renewals with cron or systemd timers
  • Hook into your web server or reverse proxy for reloads
  • Test the full chain, not just issuance

Centralise Where Possible

If you run multiple services:

  • Terminate TLS at a reverse proxy (nginx, Caddy, Traefik)
  • Let the proxy handle cert renewal; backend traffic stays internal
  • Fewer certs to track, less duplication

Centralisation reduces moving parts, but document your setup.

Wildcards and SANs

Let’s Encrypt supports:

  • Wildcard certs for *.yourdomain.com
  • Subject Alternative Names for multiple subdomains on one cert

Fewer certs means fewer expiry points — just keep DNS automation secure.

Monitor Expiry Proactively

Even with automation:

  • Set up a simple script or use an external service to alert 30 days before expiry
  • Log renewals and reload failures
  • Make expiry dates visible in your dashboard or status page

Trust, but verify.

Don’t Forget Internal Services

Intranets and self-signed certs rot too:

  • Use your own ACME-compatible CA (e.g. step-ca) for internal endpoints
  • Distribute trust anchors to devices once, not per-service
  • Treat “internal” with the same paranoia as “external”

Certificates Are Plumbing

TLS isn’t glamorous. It’s infrastructure glue:

  • You don’t need enterprise PKI to get it right
  • You need automation, visibility, and recovery paths

A boring cert setup is a healthy one.
No more weekend fire drills.