CSR Decoder

Decode a PKCS#10 certificate signing request to see its subject, SANs, key size, signature algorithm and fingerprints.

Parsed locally in your browser โ€” never uploaded. Never paste a private key anywhere.

Paste a certificate signing request above โ€” it is decoded as you type.

No uploads. Your files stay on your device.

Free forever, no sign-up, no cookies. Buy me a coffee

How it works

A certificate signing request is a PKCS#10 structure (RFC 2986): a CertificationRequestInfo holding the version, the subject distinguished name, the subject public key and any requested attributes, followed by the signature algorithm and a signature made with the matching private key. This decoder base64-decodes the PEM body and walks the raw DER/ASN.1 bytes by hand โ€” no crypto library โ€” to pull out every field, exactly like openssl req -in request.csr -noout -text would.

As well as the subject fields and the Subject Alternative Names inside the extensionRequest attribute (OID 1.2.840.113549.1.9.14), it reports the key algorithm and size, the signature algorithm, the SHA-256 fingerprint of the whole request and the SHA-256 fingerprint of the public key โ€” the second one is what you compare against openssl pkey -pubin -outform DER | openssl dgst -sha256 to prove a CSR matches a key. The browser's Web Crypto API then re-verifies the CSR's own signature, which is the proof-of-possession a CA checks.

The Checks section flags the things that get a request rejected: an RSA key under 2048 bits, a SHA-1 signature, a missing Subject Alternative Name, or a common name that does not appear among the SAN entries (public CAs have ignored the CN for host matching since 2017). All of this happens in your browser โ€” the request is parsed with JavaScript on this page and is never uploaded, logged or stored. A CSR contains only your public key, so it is safe to inspect; a private key is not, and this tool refuses to read one.

Frequently asked questions

How do I decode a CSR without OpenSSL?

Paste the PEM block (or open the .csr file) and this page decodes it instantly. It base64-decodes the request and walks the raw DER/ASN.1 bytes in JavaScript, so you get the same fields as "openssl req -in request.csr -noout -text": the PKCS#10 version, the full subject distinguished name, the public key algorithm and size, the RSA exponent or the named curve, every Subject Alternative Name in the extensionRequest attribute, key usage, extended key usage, basic constraints and any challenge password. No installation, no command line and no server round trip.

Is it safe to decode a CSR online?

With this tool, yes. The request is parsed entirely in your browser and is never uploaded, logged or stored, which you can confirm by disconnecting from the network and watching the page keep working. That matters even though a CSR only contains a public key: it also carries your organisation name, location and the hostnames you are about to certify, which most CA-run decoders happily log. A private key is a different story, so never paste one into any website; this tool detects a private-key PEM and refuses to read it.

How do I check that a CSR matches my private key?

Compare public key fingerprints. This page prints the SHA-256 hash of the request's SubjectPublicKeyInfo, which is the same value you get locally from "openssl pkey -in private.key -pubout -outform DER | openssl dgst -sha256". If the two hashes match, the CSR was made with that key. The page also re-verifies the CSR's own signature with the Web Crypto API, and a valid self-signature proves whoever created the request held the matching private key, which is exactly the proof of possession a CA checks.

Report a bug