Guides / A name, bound to a key, signed

TLS certificates

A certificate is not a padlock icon. It is a signed statement that this public key belongs to this name, from a CA the client already trusts.

A CERTIFICATE BINDS A PUBLIC KEY TO A NAMECAalready trustedCertificatename + public keyBrowserchecks the bindThe CA signs. The client already trusts that CA. Name must match.This is not an SSH key. Different PKI, different files, different trust.

First principles

TLS protects data in transit. The certificate is how the client decides it is talking to the name it asked for. Three parts: a public key, a name (the DNS name on the certificate), and a signature from a certificate authority. The client already has a list of CAs it trusts — shipped with the OS or the browser.

On connect, the site presents the certificate. The browser checks the signature against a trusted CA, checks that the name matches the host you typed, and checks the dates. Fail any of those and you get a warning. The padlock is that check passing, not a separate product.

Not an SSH key

SSH keys and TLS certificates both use public-key maths. They are not interchangeable. SSH trust is usually TOFU plus authorized_keys — you pin a key to a host or an account. TLS trust is a public CA ecosystem. A Let's Encrypt certificate will not sit in authorized_keys. An SSH host key will not satisfy a browser. Different files, different trust, different failure modes.

Let's Encrypt, at a high level

Let's Encrypt is a CA. You prove you control a DNS name (typically by answering an HTTP or DNS challenge). They sign a short-lived certificate for that name. You install it on the listener. You renew before it expires. That is the whole loop. Automation is the control; a human calendar is how certificates silently expire.

The certificate is public. The private key that matches it is not. Same house rule as SSH: the private key stays on the machine that terminates TLS. Copying that key into git or chat burns it. Issue a new certificate and discard the old key if it leaked.

What an admin actually does

  • Terminate TLS on the edge you control. Do not ship the private key to every container 'just in case'.
  • Monitor expiry. Ninety days is a Let's Encrypt default, not a suggestion to ignore.
  • Name the names. A certificate for the apex is not a certificate for the www host unless you asked for both.
  • Redirect HTTP to HTTPS after the certificate works. Doing it first just breaks the issuance challenge.

Informed by Let's Encrypt — getting started. Wording is ours.