Skip to content
buybitcoinsmart

Glossary / Developer reference

X.509 certificate

Also known as X509 certificates.

Definition
An X.509 certificate is a signed file that binds a public key to a name and a validity period, and it is the format behind every HTTPS connection you make to an exchange.

The format is old and shows it: X.509 arrived in 1988 as part of a directory standard, and the internet profile still in use, RFC 5280, dates from May 2008. A certificate is a structured record signed by an issuer, not a secret, so it is safe to hand out. What it proves is narrow: someone convinced an authority that they controlled a name.

How it works

A certificate is a list of fields plus a signature covering all of them.

The fields that matter to a reader are few. A serial number identifies the certificate to its issuer. The issuer field names who signed it, the subject field names who it is about, and two timestamps mark the window in which it counts. A subject public key info block holds the key itself. Extensions carry the rest, and one of them does most of the work: subjectAltName lists the domain names the certificate covers.

The common name field is the classic trap. It looks like the place a domain is stored, and for years it was, but RFC 6125 deprecated reading it in March 2011 and browsers now ignore it. A certificate whose subjectAltName does not list the site you are visiting fails, whatever its common name happens to say.

Lifetimes have collapsed over the past decade. Publicly trusted TLS certificates issued from September 1, 2020 may not be valid for longer than 398 days, down from three years and then two, and Let's Encrypt issues 90-day certificates as a matter of course because renewal is automated. A short window is a substitute for revocation, which has never worked reliably.

Anyone can make one. Signing a certificate with your own key produces a self-signed certificate, where issuer and subject are identical, and it is a perfectly valid file that no trust store recognizes. A signature is not what makes a certificate trustworthy; the identity of the signer is.

Where you see it

Click the padlock in any browser and you are looking at an X.509 certificate.

The same file format appears wherever software must check that something came from a particular vendor: signed application binaries, signed firmware updates, and the attestation certificates some hardware wallets carry so a vendor's app can tell a genuine device from a clone. BIP70 embedded certificates directly into bitcoin payment requests, the only time the format has been part of a bitcoin protocol.

Two habits protect a buyer here. Never click through a certificate warning on a site that holds money, because the browser is reporting that the name and the key do not line up and there is no benign version of that on an exchange domain. And remember that a valid certificate on a fraudulent site is normal rather than contradictory: verification covers the name, so if the name is a near-miss of the real one, the certificate is doing its job while you lose your funds.

X.509 certificate vs leaf certificate

X.509 is a format; leaf describes a position. Every certificate in a chain is an X.509 certificate, including the intermediates and the self-signed root, and calling one of them the leaf says only that it sits at the end, identifying an actual server rather than authorizing further issuance. The difference is visible in a single extension, since a certificate whose basicConstraints mark it as an authority may sign others and a leaf may not.

Not to be confused with

Frequently asked questions

Why do certificates now expire so quickly?

Because revocation is unreliable, so short lifetimes limit the damage from a certificate that should no longer be trusted. Publicly trusted certificates issued since September 1, 2020 are capped at 398 days, and Let's Encrypt uses 90 days.

Is a self-signed certificate dangerous?

It is not inherently broken, but nothing vouches for it. Issuer and subject are the same party, so accepting one means trusting whoever handed it to you, which is why browsers warn instead of connecting silently.

Related terms

More in Developer reference