Certificate decoder
A certificate is a nest of boxes, each one a tag, a length, and a value. Paste one here and this page walks that structure: every object with its byte offset, every object identifier decoded from its raw bytes, and the key usage bits translated into the permissions they stand for.
Your certificate never leaves the browser. The parser is JavaScript in this page. Pressing Decode makes no network request at all: there is no upload and no endpoint, and the tool keeps working with the network switched off. That matters, because plenty of online certificate decoders post your input to a server you know nothing about. For completeness, the page itself loads a cookieless Cloudflare Web Analytics beacon when it opens, which counts the visit and never sees what you paste.
Input
PEM or hex. A private key will be rejected, and would tell you nothing anyway.
The comparison lists every object identifier in either certificate and flags the ones that differ.
How to read the output
Every line is one object. The number on the left is its byte offset in the file, so you can check any line against openssl asn1parse -in cert.pem -i and get the same positions. Indentation is nesting depth. hl is the header length in bytes, which is the tag plus the length field, and len is the size of the content that follows.
A certificate has exactly three parts at the top level: the block that gets signed, the signature algorithm, and the signature. Everything you normally look at, the names and dates and extensions, lives inside the first one. Add the header bytes to the three parts and you get the file size exactly, which is a quick way to confirm nothing is truncated.
Extension values are themselves encoded certificates-within-certificates: the value sits inside an octet string as another complete structure. This tool looks inside whenever the content parses cleanly as a well-formed object that consumes its container exactly, which is what reveals subject alternative names, extended key usage, the key usage bits, and the revocation URLs. Where it cannot be certain, it shows the bytes and stops rather than guessing, so a line ending in raw hex means the tool declined to assume.
Key usage prints as a list of bit positions because that is genuinely what the format holds. Bit 0 is digitalSignature, 5 is keyCertSign, 6 is cRLSign. Bit 0 is the most significant bit of the first data byte, which is the opposite of what most people expect.
What it does not do
This shows structure, not verdicts. It does not verify signatures, build or validate a chain, check revocation, or tell you whether a certificate is trusted. Those need a trust store and a policy, and a page in a browser has no business pretending to either. If the structure looks right and the certificate still fails, the cause is elsewhere: dates at every level of the chain, a missing intermediate, or a trust store that differs from the one you tested with.
It also does not interpret every extension semantically. It decodes the object identifiers and shows the values, which is enough to diff a working certificate against a broken one and is usually where the answer is.
Written alongside the measured work in pqc-cert-matrix. Offsets and object identifiers were checked against OpenSSL 3.5.5 on a real certificate chain, and the example loaded by the button above is a throwaway certificate generated for that check. Background reading: How much certificate can you afford?