gizmobench

CSR Decoder

Paste a certificate signing request, or open the .csr, .pem or .der file, and the page reads it field by field: the subject, the public key and its size, every extension the request asks for with the subject alternative names listed one by one, its attributes, the signature algorithm, the SHA-256 of the request and the SHA-256 pin of its public key. A second view lists the ASN.1 structure offset by offset, the same rows openssl asn1parse prints for the same file. The self-signature can be checked here too, with your browser's WebCrypto, for RSA and for ECDSA on P-256, P-384 and P-521 with SHA-1, SHA-256, SHA-384 or SHA-512; anything else is marked not checked, with the reason, rather than passed. What is not a request is named instead of guessed at: an issued certificate is identified as one, a private key is refused with none of its contents read out and nothing stored, and a cut-off request, or one whose lengths or nesting are broken, stops at the byte offset where reading failed. The reading happens in this tab, with nothing uploaded and no account.

PKCS#10 request
subject     C=US
            O=Gizmobench Example
            CN=fixture.example.test
key         RSA, 2048-bit, exponent 65537
SAN         DNS:fixture.example.test
            DNS:www.fixture.example.test
extensions  Subject alternative name
signed as   SHA-256 with RSA
signature   not checked yet
SHA-256 of the request, DER
A7:FD:56:0D:C4:7A:B5:0F:F5:52:4C:C2:89:55:C5:B5
6C:D6:76:12:16:B8:5E:2E:8A:70:86:9A:05:46:B6:32
SHA-256 of the public key, base64
hfMUvCj9j8Uj1+FR95Fe4d5Kr96bye8PcARc9HhuV6w=
Type
PKCS#10 request
Key
RSA, 2048-bit
Signature algorithm
SHA-256 with RSA
DER size
734 bytes
Signature

Decoded a signing request: RSA, 2048-bit, SHA-256 with RSA, subject C=US, O=Gizmobench Example, CN=fixture.example.test. Signature not checked yet.

Signature. Not checked yet. Check signature, in the readout above, checks it in this browser; a request you paste or open is checked as soon as it is read.

Subject

NameValue
Country (C)US
Organization (O)Gizmobench Example
Common name (CN)fixture.example.test

Public key

FieldValue
KeyRSA, 2048-bit, exponent 65537
Size2,048 bits, read from the length of the modulus
Exponent65537
ModulusBCC09651FD62181AF549AAEB785BC482046272D12A505E66A65B974AA3D0D9B964A6D363C7A0C6355176E5706708D3E97872F3A245EED40ACB3452F934455601DAA79F21FAA3ACD9B8D5B175F8240119E9C001ECB2B687F2C096A619395223F5F4844CF99C587E0BC26FD5D0DBE10650F4A53E13E93C1B93ACFC5CA15C88144F14A44CC40FE5CBFC61B99DC45EB2ACB3B9B9E14D64B2575CF258C0F64E0172717954130B0B4150642AE2321F0B4567BD808D47A51909B603E21D1F9C1AE085CAFE57F7A9BFF15F9DD136698C8EFA8DECF9C4F5123EB8072D7997632B60EA801AD510047D6BABBD880BB87F9A4971C8AF194B88D785B52A99D2FDEEAFCBB3D801
SHA-256 of the key, base64hfMUvCj9j8Uj1+FR95Fe4d5Kr96bye8PcARc9HhuV6w=
SHA-256 of the requestA7:FD:56:0D:C4:7A:B5:0F:F5:52:4C:C2:89:55:C5:B5:6C:D6:76:12:16:B8:5E:2E:8A:70:86:9A:05:46:B6:32

Requested extensions

ExtensionWhat it asks for
Subject alternative name2.5.29.17DNS:fixture.example.test, DNS:www.fixture.example.test

Attributes

AttributeValue
Extension request1.2.840.113549.1.9.141 extension

Examples

  • example-rsa.csr, made by OpenSSL734 bytes DER
    RSA, 2048-bit, two DNS names requested, signature matches its key
  • example-ec.csr, made by OpenSSL509 bytes DER
    EC, 256-bit, explicit P-256 parameters; C=US, O=Gizmobench Example, CN=fixture.example.test, as openssl req -text shows
  • An example certificate, pasted-----BEGIN CERTIFICATE-----
    named as an issued certificate, not a signing request, and not decoded as one
  • The RSA example cut to its first 15 bytesa truncated request
    stops at offset 0: the SEQUENCE claims 730 bytes and 11 follow
A matching signature is not an issued certificate. A signing request is signed with the private key that belongs to the public key inside it. When the check here says the signature matches, the request was signed by that key and has not changed since. Whether a certificate authority accepts the request, and what it issues, is decided by that authority. The check runs in this browser with WebCrypto for RSA (PKCS#1 v1.5 and PSS) and for ECDSA on P-256, P-384 and P-521, each with SHA-1, SHA-256, SHA-384 or SHA-512. Anything else, Ed25519 and secp256k1 among them, is shown as not checked, with the reason.

Up to 1 MB (1,048,576 characters or bytes) of PEM or DER, pasted, opened or dropped on the dark panel, read in this tab with no upload and no account. A private key is refused with none of its contents read out and nothing stored, and an issued certificate is named as one instead of being read as a request. The page remembers only whether you last looked at the summary or the ASN.1 view; the request itself is not kept, and Start over above the tool forgets that choice.

Accuracy. Reads the request's own bytes and shows its subject, public key, requested extensions and signature algorithm exactly as written, from PEM or DER up to 1 MB. The self-signature is checked in your browser only for RSA (PKCS#1 v1.5 or PSS) and ECDSA on P-256, P-384 or P-521, with SHA-1, SHA-256, SHA-384 or SHA-512, and anything else is marked not checked. A match shows the request was signed by the key it carries, not that a certificate authority will accept it or issue a certificate.

Common questions

How do I decode a CSR?
Paste it into the box, including the BEGIN CERTIFICATE REQUEST and END CERTIFICATE REQUEST lines, and the summary appears beside it as you type. You can also press Open file and pick a .csr, .req, .pem, .der or .txt file, or drop the file on the dark panel. A text file goes into the box as it is; a binary DER file is turned into base64 with BEGIN and END lines around it, so what the page decoded is always in front of you. A request copied as bare base64, out of a JSON field or a config file, with no BEGIN and END lines still works: the text is read as base64 DER, and the page says that is what it did. If the paste holds more than one request, the first is read and the page says how many there were. One reading takes up to 1 MB, hundreds of times the size of a real request.
What is inside a certificate signing request?
Besides a version number, four things, and the page shows each one. The subject is the name the certificate is being asked for, written as parts such as C for country, O for organization and CN for common name. The public key is the half of the key pair that will go into the certificate; the page shows its type and size, and for RSA the modulus and exponent, for EC the curve and the public point. The attributes carry anything else the request asks for, most often an extension request holding the subject alternative names, key usage and extended key usage the applicant wants. Last come the signature algorithm and the signature itself, made with the private key that matches the public key. The ASN.1 view lists all of it as bytes: the offset, type and length of each field, and what the known ones are.
Does a matching signature mean the CSR is valid, or that a CA will accept it?
It means one precise thing: the request was signed with the private key that belongs to the public key inside it, and nothing in the signed part has changed since. Whether a certificate authority accepts the request, and what it issues, is decided by that authority under its own rules, and this page says nothing about that. The check runs in your browser with WebCrypto for RSA, in both the PKCS#1 v1.5 and the PSS forms, and for ECDSA on P-256, P-384 and P-521, each with SHA-1, SHA-256, SHA-384 or SHA-512. A key whose curve is written out in full is checked only when its field, coefficients, base point, order and cofactor are identical to one of those three curves. Anything else, Ed25519, secp256k1, SHA-224 and DSA among them, is shown as not checked, with the reason. The example the page opens on waits for you to press Check signature; a request you paste, open or pick from the examples is checked as soon as it is read.
How can I tell whether a CSR matches my private key or my certificate?
Compare the SHA-256 of the public key. The page shows it in base64 in the summary as SHA-256 of the public key, and the same value comes from your own key with openssl pkey -in private.key -pubout -outform der | openssl dgst -sha256 -binary | openssl base64, and from a certificate with openssl x509 -in cert.pem -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | openssl base64. When the three agree, the request, the key and the certificate hold the same public key. Do this on your own machine: the private key never needs to come near this page, and a private key pasted here is refused without being read out.
Where are the subject alternative names, and why does my CSR say none are requested?
They live in the extension request attribute, and the page lists each one with its type, DNS, IP, email or URI, in the SAN line of the summary and in the Requested extensions table. When a request carries no subject alternative name extension, the page says so in a note. Browsers match a hostname against a certificate's SAN and have ignored the common name since 2017.
Why is my EC key's size shown as not given?
Because this page reports an EC key size only from something the request states outright. A named curve found in its fixed table, P-256, P-384, P-521, secp256k1, P-224, P-192, the three brainpool curves or SM2, gives the size that curve defines. A curve written out in full over a prime field gives the bit length of its prime; one over a binary field gets no size. A curve identifier the table does not hold is shown by its number, as a curve this page does not know, and gets no size, because a guessed size would be a number the request never stated.
Can it read a certificate, or a private key?
No, and it says which one you pasted. An issued certificate, labelled BEGIN CERTIFICATE or recognised by its shape, is named as a certificate and not decoded as a request: a request is what goes to a certificate authority, and the certificate is what comes back. A private key, by its PRIVATE KEY label or by the shape of its DER, is refused: a PEM or DER key file you open never reaches the box, a pasted key is not read out, and the key material is never quoted back. A PEM public key, CRL or PKCS#7 bundle is named the same way. A server address is refused too: this page reads a file, it does not connect to servers.
Is my CSR uploaded or kept?
Neither. The request is decoded in this tab and is not sent anywhere. The first check of a signature loads the checking code from this site, which carries nothing of yours. The only thing the page remembers in this browser is whether you last looked at the summary or the ASN.1 view; the request itself is not kept, so a fresh visit opens on the example again, and the Start over button above the tool forgets the view choice as well.

Reads the request's own bytes and shows its subject, public key, requested extensions and signature algorithm exactly as written, from PEM or DER up to 1 MB. The self-signature is checked in your browser only for RSA (PKCS#1 v1.5 or PSS) and ECDSA on P-256, P-384 or P-521, with SHA-1, SHA-256, SHA-384 or SHA-512, and anything else is marked not checked. A match shows the request was signed by the key it carries, not that a certificate authority will accept it or issue a certificate.