PEM Inspector

Paste one or more PEM blocks — X.509 certificates, CSRs, or public/private keys — and see subject, issuer, validity, SANs, key size, usage, and SHA-256/SHA-1 fingerprints. Runs entirely in your browser: nothing is uploaded and private-key secrets are never read.

Decoded PEM

About this tool

PEM Inspector decodes PEM-encoded X.509 certificates, PKCS#10 certificate requests (CSRs), and public/private keys and shows you exactly what is inside them — subject, issuer, validity window, Subject Alternative Names, key algorithm and size, key usage, and SHA-256/SHA-1 fingerprints. Everything runs in a locally compiled WebAssembly (WASM) binary, so your certificates and keys never leave your device. You can paste a whole certificate chain at once — each -----BEGIN …----- block is decoded independently.

A PEM file is just base64-wrapped DER with a -----BEGIN <label>----- header, and the label tells you what the block is: CERTIFICATE, CERTIFICATE REQUEST, PUBLIC KEY, RSA PRIVATE KEY, and so on. This tool reads that structure so you don't have to reach for openssl x509 -text on the command line.

Worked example

Paste a certificate block such as:

-----BEGIN CERTIFICATE-----
MIID… (base64 body) …QmA=
-----END CERTIFICATE-----

and the tool returns one JSON object describing it, for example:

[
  {
    "type": "certificate",
    "version": "v3",
    "serial": "0a1b2c…",
    "subject": "CN=pem-inspect.example",
    "issuer": "CN=pem-inspect.example",
    "self_signed": true,
    "not_before": "Jul 29 13:23:39 2026 +00:00",
    "not_after": "Jul 24 13:23:39 2046 +00:00",
    "status": "valid",
    "days_until_expiry": 7144,
    "is_ca": false,
    "subject_alt_names": ["DNS:pem-inspect.example"],
    "public_key": { "algorithm": "RSA", "key_size_bits": 2048 },
    "signature_algorithm": "SHA-256 with RSA",
    "fingerprint_sha256": "AB:CD:…",
    "fingerprint_sha1": "12:34:…"
  }
]

The status and days_until_expiry fields are computed against your browser's current time, so you can tell at a glance whether a certificate is valid, not yet valid, or expired.

FAQ

Is it safe to paste a private key here?

Yes. All parsing happens locally inside WebAssembly in your browser — nothing is uploaded to a server. For any private key the tool reports only the key type, algorithm, and size (for example, "PKCS#8 PrivateKeyInfo, RSA, 2048 bits"). It never reads, prints, or transmits the secret scalar (the private exponent or EC private value). That said, treat production private keys with care and prefer a throwaway or test key when you can.

What PEM block types are supported?

X.509 certificates (CERTIFICATE, TRUSTED CERTIFICATE, X509 CERTIFICATE), PKCS#10 requests (CERTIFICATE REQUEST, NEW CERTIFICATE REQUEST), SPKI public keys (PUBLIC KEY), PKCS#1 RSA public keys (RSA PUBLIC KEY), and private keys in PKCS#8 (PRIVATE KEY), PKCS#1 (RSA PRIVATE KEY), and SEC1 (EC PRIVATE KEY) form. An ENCRYPTED PRIVATE KEY block is recognised but reported as encrypted — decrypt it first (for example with openssl pkcs8) before inspecting.

Can I decode a whole certificate chain at once?

Yes. Paste every -----BEGIN …----- / -----END …----- block one after another and the tool decodes each block independently, returning one JSON object per block in order. This is handy for inspecting a leaf certificate together with its intermediate and root.

How do I get the PEM text out of a `.pfx`/`.p12` or `.der` file?

This tool takes PEM (base64) text, not binary files. Convert a DER file with openssl x509 -inform der -in cert.der, or extract certificates from a PKCS#12 bundle with openssl pkcs12 -in bundle.p12 -nokeys -clcerts, then paste the resulting -----BEGIN CERTIFICATE----- block here.

Limitations

Developer & Automation Access

Run it from the terminal

Same engine as this page, headless — via the gizza CLI:

gizza tool pem-inspect "
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArnlv3X6UkO2HDKwMHnW+
3csIuYqUY+/U+vxjtsgz/OkEw78bYBhnVpf7VO+Yv/lzWJaLC6pFJ1/Ky734A2Vq
CIOfD3yXB6iLHnv+F4hf5ltDFNfFkGNvwVwR7xrdjnMayJ/X1xUSsW8sOEniiw2D
BU1xm+foTSYAjI34xlVFl1ek2jlTp6DkGILAG79rCmQksRoYpq8ddd4km2Qb3bST
swLeccWWNSzXW3rbYOV5xIr6heULzBI0EWs6GgEFvfOZVdmLqPHSB1yoe0CjyKNe
XTqmSX/tdodxD+ZaD2HuZoOqTKpaDPeTAocAOKqsyoJWXPPz/AR0tuLov5/TxfEM
UwIDAQAB
-----END PUBLIC KEY-----"

New to the CLI? Get gizza →

Open it by URL

Pre-fill and auto-run this tool with query parameters — the names match the API/CLI:

https://gizza.ai/tools/pem-inspect/?input=%0A-----BEGIN%20PUBLIC%20KEY-----%0AMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArnlv3X6UkO2HDKwMHnW%2B%0A3csIuYqUY%2B%2FU%2Bvxjtsgz%2FOkEw78bYBhnVpf7VO%2BYv%2FlzWJaLC6pFJ1%2FKy734A2Vq%0ACIOfD3yXB6iLHnv%2BF4hf5ltDFNfFkGNvwVwR7xrdjnMayJ%2FX1xUSsW8sOEniiw2D%0ABU1xm%2BfoTSYAjI34xlVFl1ek2jlTp6DkGILAG79rCmQksRoYpq8ddd4km2Qb3bST%0AswLeccWWNSzXW3rbYOV5xIr6heULzBI0EWs6GgEFvfOZVdmLqPHSB1yoe0CjyKNe%0AXTqmSX%2FtdodxD%2BZaD2HuZoOqTKpaDPeTAocAOKqsyoJWXPPz%2FAR0tuLov5%2FTxfEM%0AUwIDAQAB%0A-----END%20PUBLIC%20KEY-----

Machine-readable descriptor: tool.json — title + parameters JSON Schema for agents.