Certificate / DER Structure Viewer
Decode a PEM certificate into its real Subject, Issuer, validity, public key and X.509v3 extensions -- plus raw ASN.1 structure and SHA fingerprints for any PEM block.
What this tool does
Decodes a PEM-encoded X.509 certificate into its
actual fields — Subject, Issuer, serial number, validity window,
public key algorithm and size, and every v3 extension — written
from scratch against a real ASN.1/DER byte reader, not a canned
summary. For any other PEM block (a public key, private key, or
certificate signing request), it falls back to a generic
ASN.1 structure tree (tag/length/value, like
openssl asn1parse) plus SHA-1/SHA-256 fingerprints,
since those block types don't carry Subject/Issuer/validity fields
to decode.
From ASN.1 bytes to real fields
A certificate is DER-encoded ASN.1 — nested tag/length/value triples with no field names in the bytes themselves. Reading "Subject: CN=example.com" out of that requires knowing where X.509 puts the Subject inside the generic SEQUENCE nesting (it's the 6th field of the TBSCertificate SEQUENCE, following an optional version, serial number, signature algorithm, and issuer) — this tool walks that structure field by field per the X.509 spec, rather than just printing the raw tree and leaving you to map it manually.
Subject and Issuer
Both are a Distinguished Name — an ordered set
of attributes like CN (Common Name), O
(Organization), OU (Organizational Unit),
C (Country), ST/L (state/
locality), and emailAddress. When Issuer and Subject
are identical, the certificate is self-signed —
flagged directly rather than left for you to compare by eye.
Validity window and status
Not Before / Not After are decoded from their raw UTCTime or GeneralizedTime encoding into real dates, then compared against the current time to show a status pill: valid, not yet valid, expiring within 30 days, or expired — the kind of check a browser does silently that's otherwise invisible when you're just staring at a PEM blob.
Public key: algorithm and real size
For an RSA key, the modulus is extracted and its actual
significant bit length computed (not assumed from byte count,
which can be off by a few bits due to DER's sign-padding byte) —
the same "2048-bit" / "4096-bit" figure openssl
reports. For an EC key, the named curve is identified from its OID
(P-256, P-384, P-521, secp256k1) and the key size read off the
curve.
Extensions, decoded
X.509v3 extensions are themselves nested, OID-tagged ASN.1 structures. This tool decodes the common ones instead of leaving them as hex: Subject Alternative Name (DNS names, IPs, emails, URIs), Key Usage (which of the 9 defined bits are set, by name), Basic Constraints (CA: true/false and path length), Extended Key Usage (server auth, client auth, code signing, etc.), Subject/Authority Key Identifier, CRL Distribution Points and Authority Information Access (OCSP/CA Issuer URLs). An extension this tool doesn't have a decoder for yet still shows its OID and raw hex rather than silently disappearing.
Fingerprints
SHA-1 and SHA-256 fingerprints are computed over the full raw
DER bytes (the standard definition) using
crypto.subtle.digest. A fingerprint is useful for
confirming two copies of a certificate are byte-identical — it is
not a substitute for actually validating the
certificate's signature against a trusted root, which this tool
does not attempt.
Loading a certificate
Paste PEM text directly, drag a file onto the text box, or use
the upload button — .pem, .crt,
.cer, .csr and .key files
all work since they're plain text PEM under the hood.
Privacy
Every byte is parsed and every fingerprint is computed entirely in your browser. Nothing is uploaded — there is no server component to this tool at all.