Runs in your browser

CSR decoder and checker

Paste a certificate signing request to read every field your certificate authority will see (subject, requested hostnames, key type and size, signature algorithm) and to confirm its signature matches its public key. The decoding happens on this page, and nothing you paste is sent anywhere.

Decoded in this browser tab. Nothing you paste or load is uploaded, stored or logged.

Paste a request that starts with -----BEGIN CERTIFICATE REQUEST----- to see its subject, names, key and signature check.

What each field in a CSR means

A CSR is a short signed message: the names you want on the certificate, your public key, and a signature made with the matching private key.

FieldWhat to check
Common name (CN)The main hostname, such as www.example.com. Browsers do not match against it, so it must also appear in the SAN list.
Subject alternative namesEvery hostname, wildcard or IP address the certificate should cover. This is the list browsers actually match.
Organisation, locality, stateOnly used for organisation-validated (OV) and extended-validation (EV) certificates. A domain-validated certificate leaves them out, whatever the CSR says.
Country (C)A two-letter ISO 3166 code such as GB or US. A full country name is a common reason for a rejected request.
Organisational unit (OU)Public certificate authorities stopped putting it in TLS certificates in September 2022, so it is dropped if present.
Public keyRSA of at least 2048 bits, or ECDSA on P-256 or P-384. The matching private key stays on your server and is never part of the CSR.
Signature algorithmThe hash used to sign the request, normally SHA-256. The certificate authority chooses its own algorithm for the certificate it issues.
SignatureProof that whoever made the request holds the private key. If it does not match the public key, the request was changed after it was signed.
Challenge passwordAn optional attribute from older enrolment systems. It sits in the CSR as plain text, so anyone with the file can read it.

Check a CSR with OpenSSL

The same checks from a terminal. Each command below was run against the sample CSR on this page, and the output is what OpenSSL 3 printed.

Verify the signature
openssl req -in request.csr -noout -verify
Certificate request self-signature verify OK
Print the subject
openssl req -in request.csr -noout -subject
subject=C = GB, ST = Isle of Man, L = Douglas, O = Beacon Test Ltd, CN = www.example.com, emailAddress = ops@example.com
List the requested names
openssl req -in request.csr -noout -text | grep -A1 'Subject Alternative Name'
X509v3 Subject Alternative Name:
    DNS:www.example.com, DNS:example.com, DNS:*.api.example.com, IP Address:192.0.2.10, email:ops@example.com, URI:https://example.com/

Does this CSR match my private key?

Compare a SHA-256 hash of the public key in the CSR with one derived from your private key. The decoder already shows the first value as Public key SHA-256, so on the server you only need the second command.

From the CSR
openssl req -in request.csr -noout -pubkey \
  | openssl pkey -pubin -outform der | openssl dgst -sha256
SHA2-256(stdin)= 199f5b2364f768995f0f743f175a29f06d6596a653aa1b15ad0caa9646a9d5c6
From the private key, on your server
openssl pkey -in private.key -pubout -outform der | openssl dgst -sha256
SHA2-256(stdin)= 199f5b2364f768995f0f743f175a29f06d6596a653aa1b15ad0caa9646a9d5c6

Identical hashes mean the CSR was made from this key. The certificate decoder shows the same value for an issued certificate, so you can trace a certificate back to its CSR and key.

What the decoder warns about

Each warning is something a certificate authority is likely to reject, or a field that will not end up on the certificate.

  • A signature that does not match the public key, which means the request was changed after it was signed.
  • RSA keys shorter than 2048 bits, which certificate authorities refuse.
  • Ed25519, Ed448 and uncommon curves, which public certificate authorities cannot sign, and P-521, which some refuse.
  • SHA-1 or MD5 signatures, which some certificate authorities reject.
  • No subject alternative names, a common name missing from the SAN list, or hostnames with characters a public certificate cannot hold.
  • A country that is not a two-letter code, an organisational unit that will be dropped, and a challenge password stored in plain text.

From CSR to a certificate you can watch

Decoding the request is the cheapest point to catch a mistake. After that, the job is making sure the issued certificate reaches the server and is renewed in time.

  1. Generate the key and CSR on the server

    For example: openssl req -new -newkey rsa:2048 -nodes -keyout example.key -out example.csr -subj "/CN=example.com" -addext "subjectAltName=DNS:example.com,DNS:www.example.com". The private key never leaves that machine.

  2. Decode it here before you submit it

    Check the names, the key size and the signature now. A rejected request costs a round trip with the certificate authority.

  3. Decode the certificate you get back

    Paste it into the certificate decoder and confirm it covers the same names and shows the same public key SHA-256 as your CSR.

  4. Check and monitor the live host

    Run the SSL certificate checker against the hostname once the certificate is installed, then save it as a monitor so you hear about expiry before your visitors do.

Questions about decoding a CSR

Is it safe to paste a CSR into a website?

A CSR holds only public information: the names, the public key and a signature. On this page it is not sent anywhere either, because the decoding and the signature check run in your browser. Never paste a private key, here or anywhere else; the decoder refuses to read one.

What does “signature verified” mean?

The CSR was signed with the private key that matches the public key inside it. The decoder checks this with your browser's Web Crypto API. A mismatch means the request was changed after it was signed, and a certificate authority will reject it. A few algorithms, such as DSA or SHA-224, cannot be checked in a browser, and the decoder says so instead of guessing.

Does a CSR contain my private key?

No. It carries only the public half. If the text you have includes a line such as BEGIN PRIVATE KEY, that part is your private key and should stay on the server.

Why does my CSR have no subject alternative names?

OpenSSL only adds them when asked, with -addext "subjectAltName=DNS:example.com,DNS:www.example.com" on OpenSSL 1.1.1 or later, or a subjectAltName line in the request config. Most certificate authorities copy the common name in for you, but listing every hostname yourself avoids a certificate that misses one.

Can it decode a certificate as well?

Yes, a certificate pasted here is decoded too. The certificate decoder is built for them, though: it reads whole chains, checks each signature against its issuer, and counts the days left.