SSL/TLS glossary

What is a self-signed certificate?

A self-signed certificate is one signed with its own private key: issuer and subject are the same entity, and no certificate authority is involved. Anyone can create one in seconds with openssl, and the TLS encryption it enables is exactly as strong as with a paid certificate. What it cannot do is prove identity, and that is the entire reason browsers reject it.

The browser warning is not pedantry. Trust in TLS comes from the chain: a CA that browsers trust vouches that the certificate holder controls the domain. A self-signed certificate carries no vouching — an attacker in the network path can generate one for your domain just as easily as you can, and the two are indistinguishable. Accepting a self-signed certificate on the public web is equivalent to accepting any certificate at all, which is why the warnings are deliberately hard to click through.

Inside infrastructure you control, the calculus changes. For development machines, service-to-service traffic, appliances, and test environments, identity can be established out of band: you distribute the certificate (or better, a private root that signs many certificates) to the clients that should trust it, and those clients validate against it exactly as browsers validate against public roots. That is a private CA, and it is the grown-up version of the self-signed certificate — same independence from public CAs, but with real chains, rotation, and revocation.

The failure mode worth naming is normalisation: teams that click through self-signed warnings daily stop reading them, and tooling configured to skip verification (curl -k, verify=False) tends to ship to production. If a system needs TLS without a public CA, give its clients the right root to trust; teaching humans or code to ignore verification errors is the one option that is worse than no TLS at all.

Source: RFC 5280 (self-issued and self-signed certificates)

Common questions

Is a self-signed certificate less secure than a CA one?

The encryption is identical. What differs is authentication: nothing ties a self-signed certificate to the domain it claims, so clients cannot tell yours from an attacker’s. On the public web that difference is the whole game.

Why does my monitoring flag my internal self-signed cert?

External checkers validate against public roots, and a self-signed certificate fails that check by definition. Either add your private root to the checker’s trust configuration or scope public checks to public hostnames.

Reading up because something broke? Check the certificate you actually serve — 3 monitored free, no card.

One check now, or every day from now on.

3 certificates free forever · No agent · No credit card