Developer tools

X.509 certificate parser and decoder

Read a PEM or DER certificate on your device: subject, issuer, validity, key, extensions, fingerprints and plain factual flags. It does not check trust.

X.509 certificate parser and decoder
Esc to restore

Your inputs

This tool reads a certificate. It does not verify the signature or the chain, does not check revocation, and cannot say whether the certificate is trusted. Everything is read on this device. A private key is refused.

Paste a -----BEGIN CERTIFICATE----- block, a chain of up to 10 of them, the bare Base64 body, or the DER bytes as hex. The example is a small self-signed certificate made for this page. A private key is refused.

A .pem, .crt, .cer or .der file of up to 2 MB, read on this device and never uploaded. When a file is chosen it is used instead of the pasted text.

The tool never reads the clock. It asks whether the certificate is valid on this date, counting the whole day in UTC.

Results update as you type. Larger files run when you press Update result.

Your result

Your result will appear here.

More actions

Your inputs stay in this browser. Nothing is uploaded or saved.

A clear answer. Here’s how.

Reads a certificate and lays out what it says; it does not decide whether to trust it. The input can be PEM (one block or a chain of up to 10), the bare Base64 body, the DER bytes as hex, or a .pem, .crt, .cer or .der file (a binary DER file or PEM text; a chosen file replaces the pasted text). The reader is a small ASN.1 DER parser (ITU-T X.690) that accepts definite lengths only and refuses indefinite lengths, nesting deeper than 20 levels, more than 40,000 elements and truncated data, each with a plain message. It decodes the RFC 5280 structure: the version; the serial number in hex and decimal; the signature algorithm, with RSASSA-PSS parameters; the issuer and subject names as an RFC 4514 style string (last name part first) and as a table of attributes, each with the string type it was encoded as (UTF8String, PrintableString, IA5String, TeletexString read as ISO 8859-1, BMPString as UTF-16, UniversalString as UTF-32); the validity (a UTCTime year of 50 to 99 means 1950 to 1999 and 00 to 49 means 2000 to 2049, as RFC 5280 section 4.1.2.5 says); the public key (RSA modulus size and exponent; elliptic-curve keys by named curve, including P-256, P-384, P-521 and secp256k1, with the point form and length; Ed25519, Ed448, X25519 and X448; DSA; ML-DSA, ML-KEM and SLH-DSA by name; any other key by its OID); and the extensions with their critical flags: subject and issuer alternative names (DNS, IP, email, URI, directory and other names), key usage, extended key usage, basic constraints, subject and authority key identifiers, CRL distribution points, authority information access, certificate policies, name constraints, TLS feature and the number of embedded signed certificate timestamps. An extension the tool does not decode is listed with its OID, critical flag and size. The fingerprints are SHA-1 and SHA-256 of the DER bytes, as OpenSSL prints them, and the SHA-256 of the key info is the value used for key pinning. The check date asks whether the certificate is valid on a day you pick, counting the whole day in UTC; the tool never reads the clock. The observations are factual checks and each names its rule: a SHA-1, MD5 or MD2 signature; an RSA key under 2048 bits (CA/Browser Forum Baseline Requirements section 6.1.5); a TLS server certificate valid for longer than section 6.3.2 allows for its not-before date (398 days before 2026-03-15, 200 days until 2027-03-15, 100 days until 2029-03-15, 47 days after, as in version 2.3.1 of 4 October 2026); a missing subject alternative name; an issuer equal to the subject; and breaches of RFC 5280 (a serial number over 20 bytes, zero or negative, two signature algorithms that differ, CA basic constraints that are not critical, keyCertSign without the CA flag). This tool does not verify the signature, build or check a chain, contact an OCSP or CRL server, decide trust, match a host name or check that a key point lies on its curve. A private key pasted by mistake is refused and never shown back.

How this is checked

4 reference checks passed These 4 cases were run when this page was built, on 20 October 2026, and all reproduce within the stated tolerance. The same cases are part of the automated tests that run on every change to Toolmoz. Engine version 1.

See the checks and where each expected answer comes from
  1. Case 1

    Inputs
    The tool’s default inputs
    Expected, and what Toolmoz gave
    Subject expected CN=example.test,O=Statmoz Examples,C=GB, Toolmoz CN=example.test,O=Statmoz Examples,C=GBSerial number (hex) expected 5A17C0DE2026A001, Toolmoz 5A17C0DE2026A001SHA-256 fingerprint expected 6B:B0:4D:6F:03:37:C3:39:90:00:5A:CD:DC:91:4A:12:A1:D7:2A:03:83:56:CD:87:D4:B6:E4:3C:A9:70:B4:26, Toolmoz 6B:B0:4D:6F:03:37:C3:39:90:00:5A:CD:DC:91:4A:12:A1:D7:2A:03:83:56:CD:87:D4:B6:E4:3C:A9:70:B4:26Public key size (bits) expected 256, Toolmoz 256Validity period (days) expected 90, Toolmoz 90Valid on the check date expected Valid, Toolmoz ValidDays from the check date to not-after expected 73, Toolmoz 73
    Where the expected answer comes from
    OpenSSL 3.5.7 (x509 -text -serial -fingerprint -sha256 -subject -nameopt RFC2253) on this PEM: serial=5A17C0DE2026A001, Not Before Oct 1 2026, Not After Dec 30 2026, Public-Key 256 bit, subject CN=example.test,O=Statmoz Examples,C=GB, the SHA-256 fingerprint shown. By hand: 1 October to 1 November is 31 days, to 1 December 30, to 30 December 29, so 31 + 30 + 29 = 90 days; from 18 October to 30 December is 13 days left in October (19 to 31), 30 in November and 30 in December, so 73
    Allowed difference
    exact
  2. Case 2

    Inputs
    Check validity on 2027-01-15
    Expected, and what Toolmoz gave
    Valid on the check date expected Expired, Toolmoz ExpiredDays from the check date to not-after expected -16, Toolmoz -16
    Where the expected answer comes from
    The same certificate expires on 30 December 2026. By hand: 30 December to 31 December is 1 day and to 15 January is 15 more, so 15 January 2027 is 16 days after the not-after date, which is -16 days from the check date
    Allowed difference
    exact
  3. Case 3

    Inputs
    Certificate (PEM, Base64 or hex) -----BEGIN CERTIFICATE----- MIIBLDCB36ADAgECAghWAUdKKo3DMDAFBgMrZXAwGTEXMBUGA1UEAwwOSUVURiBUZX N0IERlbW8wHhcNMTYwODAxMTIxOTI0WhcNNDAxMjMxMjM1OTU5WjAZMRcwFQYDVQQD DA5JRVRGIFRlc3QgRGVtbzAqMAUGAytlbgMhAIUg8AmJMKdUdIt93LQ+91oNvzoNJj ga9OukqY6qm05qo0UwQzAPBgNVHRMBAf8EBTADAQEAMA4GA1UdDwEBAAQEAwIDCDAg BgNVHQ4BAQAEFgQUmx9e7e0EM4Xk97xiPFl1uQvIuzswBQYDK2VwA0EAryMB/t3J5v /BzKc9dNZIpDmAgs3babFOTQbs+BolzlDUwsPrdGxO3YNGhW7Ibz3OGhhlxXrCe1Cg w1AH9efZBw== -----END CERTIFICATE-----
    Expected, and what Toolmoz gave
    Subject expected CN=IETF Test Demo, Toolmoz CN=IETF Test DemoSerial number (hex) expected 5601474A2A8DC330, Toolmoz 5601474A2A8DC330Signature algorithm expected Ed25519, Toolmoz Ed25519Public key algorithm expected X25519, Toolmoz X25519Not before (UTC) expected 2016-08-01T12:19:24Z, Toolmoz 2016-08-01T12:19:24ZNot after (UTC) expected 2040-12-31T23:59:59Z, Toolmoz 2040-12-31T23:59:59ZSelf-issued expected Yes, Toolmoz Yes
    Where the expected answer comes from
    RFC 8410 section 10.2, the dump printed under the example: serial 56 01 47 4A 2A 8D C3 30, issuer and subject commonName IETF Test Demo, UTCTime 01/08/2016 12:19:24 GMT to 31/12/2040 23:59:59 GMT, signature algorithm 1.3.101.112 (Ed25519) and key algorithm 1.3.101.110 (X25519)
    Allowed difference
    exact
  4. Case 4

    Inputs
    Certificate (PEM, Base64 or hex) -----BEGIN CERTIFICATE----- MIICGzCCAaGgAwIBAgIQQdKd0XLq7qeAwSxs6S+HUjAKBggqhkjOPQQDAzBPMQsw CQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2gg R3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMjAeFw0yMDA5MDQwMDAwMDBaFw00 MDA5MTcxNjAwMDBaME8xCzAJBgNVBAYTAlVTMSkwJwYDVQQKEyBJbnRlcm5ldCBT ZWN1cml0eSBSZXNlYXJjaCBHcm91cDEVMBMGA1UEAxMMSVNSRyBSb290IFgyMHYw EAYHKoZIzj0CAQYFK4EEACIDYgAEzZvVn4CDCuwJSvMWSj5cz3es3mcFDR0HttwW +1qLFNvicWDEukWVEYmO6gbf9yoWHKS5xcUy4APgHoIYOIvXRdgKam7mAHf7AlF9 ItgKbppbd9/w+kHsOdx1ymgHDB/qo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0T AQH/BAUwAwEB/zAdBgNVHQ4EFgQUfEKWrt5LSDv6kviejM9ti6lyN5UwCgYIKoZI zj0EAwMDaAAwZQIwe3lORlCEwkSHRhtFcP9Ymd70/aTSVaYgLXTWNLxBo1BfASdW tL4ndQavEi51mI38AjEAi/V3bNTIZargCyzuFJ0nN6T5U6VR5CmD1/iQMVtCnwr1 /q4AaOeMSQ+2b1tbFfLn -----END CERTIFICATE-----
    Expected, and what Toolmoz gave
    Serial number (hex) expected 41D29DD172EAEEA780C12C6CE92F8752, Toolmoz 41D29DD172EAEEA780C12C6CE92F8752SHA-256 fingerprint expected 69:72:9B:8E:15:A8:6E:FC:17:7A:57:AF:B7:17:1D:FC:64:AD:D2:8C:2F:CA:8C:F1:50:7E:34:45:3C:CB:14:70, Toolmoz 69:72:9B:8E:15:A8:6E:FC:17:7A:57:AF:B7:17:1D:FC:64:AD:D2:8C:2F:CA:8C:F1:50:7E:34:45:3C:CB:14:70Signature algorithm expected ecdsa-with-SHA384, Toolmoz ecdsa-with-SHA384Curve expected secp384r1, Toolmoz secp384r1Public key size (bits) expected 384, Toolmoz 384
    Where the expected answer comes from
    Mozilla CCADB Included CA Certificate Report (fetched 2026-10-18), row ISRG Root X2: serial number 41D29DD172EAEEA780C12C6CE92F8752, SHA-256 fingerprint 69729B8E15A86EFC177A57AFB7171DFC64ADD28C2FCA8CF1507E34453CCB1470 (written here with colons), public key EC secp384r1, signature ecdsaWithSHA384
    Allowed difference
    exact

What this shows: the engine reproduces independently worked values for these cases. It does not prove every possible input is right. To test an answer you were given, see how to check a number; to see what is and is not checked across Toolmoz, see the accuracy ledger.

See a worked example

Worked example

A fixed demonstration, separate from the values you enter above.

Certificate (PEM, Base64 or hex)
-----BEGIN CERTIFICATE-----
MIIB8zCCAZmgAwIBAgIIWhfA3iAmoAEwCgYIKoZIzj0EAwIwPzELMAkGA1UEBhMC
R0IxGTAXBgNVBAoMEFN0YXRtb3ogRXhhbXBsZXMxFTATBgNVBAMMDGV4YW1wbGUu
dGVzdDAeFw0yNjEwMDEwMDAwMDBaFw0yNjEyMzAwMDAwMDBaMD8xCzAJBgNVBAYT
AkdCMRkwFwYDVQQKDBBTdGF0bW96IEV4YW1wbGVzMRUwEwYDVQQDDAxleGFtcGxl
LnRlc3QwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATEb0+uXOP5HoMZ7ApTwI6c
DdUpNLTYxdrcGbsfWDGD6WSO+3ss6eY8susl4xMNtALK/dGEDlrEGI8YCC05yvNi
o38wfTAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggr
BgEFBQcDATAdBgNVHQ4EFgQUfkHLwMYAKOJLfjeH4lEL7HfdtU8wKQYDVR0RBCIw
IIIMZXhhbXBsZS50ZXN0ghB3d3cuZXhhbXBsZS50ZXN0MAoGCCqGSM49BAMCA0gA
MEUCIHFNDzcvD30BN5ejj3MrRV6jhOUCZK+sqUHHkTJDaY9dAiEAmr6sogaacxPY
/mkuCVN5XDufI8krPiiZoohMRYCj/oc=
-----END CERTIFICATE-----
Check validity on
2026-10-18

Example result

First 5 rows of the example result
SectionFieldValue
SummarySubjectCN=example.test,O=Statmoz Examples,C=GB
SummaryIssuerCN=example.test,O=Statmoz Examples,C=GB
SummaryOn the check dateValid
SummaryFlags1 observation listed under Findings
CertificateVersionv3 (2)

This tool reads the certificate. It does not verify the signature or the chain, does not check revocation, and cannot say whether the certificate is trusted. Observations are factual checks against RFC 5280 and the CA/Browser Forum Baseline Requirements; they say nothing about trust. Everything is read on this device.