fjordtools / Security / CSR Generator
CSR Generator
Generate a CSR in your browser: RSA, ECDSA or Ed25519, subject, SANs, key usage, PEM and DER, plus the same openssl req command. Nothing is sent or stored.
The key is made in this tab with your browser's WebCrypto. Nothing is sent or saved, and the page makes no requests after it loads (check it yourself). That does not cover browser extensions, a clipboard manager or anyone who can read your downloads folder, so for a production server you may prefer the openssl command below, which makes the key on that machine.
The key you paste is read, removed from the box and used in this tab only to sign the request. It is neither sent nor saved, and the page makes no requests after it loads (check it yourself). That does not cover browser extensions, a clipboard manager or anyone watching your screen. For a key that protects something real, run the openssl command below on the machine that holds it.
About CSR Generator
How do I generate a CSR?
Choose a new key (or paste one you already have), type the names the certificate must cover in the Names box, add the organization details if your CA asks for them, and press Generate CSR. You get the request as PEM (the -----BEGIN CERTIFICATE REQUEST----- text most CAs want pasted) with a .csr and a .der download, and, for a new key, the private key as a PKCS#8 file that is hidden until you show it. Send the CA only the CSR. The private key stays with the server that will use the certificate.
The same request with OpenSSL 3, with a new ECDSA key, one command:
openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:P-256 -noenc \ -keyout example.com.key -out example.com.csr -sha256 \ -subj '/C=NO/O=Example AS/CN=www.example.com' \ -addext 'keyUsage=critical,digitalSignature' \ -addext 'extendedKeyUsage=serverAuth' \ -addext 'subjectAltName=DNS:www.example.com,DNS:example.com'
For a key you already have (a renewal), replace the -newkey and -keyout options with -key example.com.key. OpenSSL 1.1.1 has no -noenc; use -nodes. Many people put the subject and names in a small config file instead; the result is the same bytes:
[req] distinguished_name = dn req_extensions = ext prompt = no [dn] C = NO O = Example AS CN = www.example.com [ext] keyUsage = critical, digitalSignature extendedKeyUsage = serverAuth subjectAltName = DNS:www.example.com, DNS:example.com
Save that as csr.cnf and run openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:P-256 -noenc -keyout example.com.key -out example.com.csr -config csr.cnf. Check a request with openssl req -in example.com.csr -noout -text -verify. It prints the subject, the names and verify OK (newer OpenSSL 3 releases print self-signature verify OK). openssl asn1parse -in example.com.csr shows the raw structure, and the Certificate Decoder reads the request with the same checks.
What does a CA read in a CSR? Common name, SAN, key type
A public CA takes two things from a request: the public key and the names. It ignores the subject fields and the requested usage, or replaces them, and it checks the signature to see that you hold the private key. Browsers match a certificate to a site by its subject alternative names (SAN) only: Chrome has ignored the common name for hostnames since version 58, RFC 9525 forbids using it, and the CA/Browser Forum Baseline Requirements require a SAN. Put every name, including the one you would have put in the common name, in the Names box. The tool tells you when the common name is missing from the list.
Key types: Let's Encrypt lists RSA 2048, 3072 and 4096 and ECDSA P-256 and P-384 as the keys it accepts. Other public CAs vary, and P-521 is the one to check first. Ed25519 requests are valid and fine for a private CA or an internal PKI, but section 6.1.5 of the Baseline Requirements allows only RSA (2048 bits or more) and ECDSA on P-256, P-384 and P-521, so public TLS CAs do not issue for Ed25519. ECDSA P-256 gives a smaller, faster certificate; RSA 2048 works with the oldest clients. The Baseline Requirements do not allow an organizational unit (OU) in public TLS certificates and list no email address among the subject attributes, so the page warns when you fill either in. Organization, city, state and country matter to OV and EV certificates, where the CA checks them itself.
Is it safe to make a CSR in the browser? Where does the private key go?
The key pair is made by your browser's WebCrypto and signed in this tab. The page makes no requests after it loads, which you can check in the Network tab, and it stores nothing: Clear, Remove key and closing the tab drop it. A request holds only public data (the subject, the names, the public key and a signature), so it is safe to send. The private key is another matter. Browser extensions, a clipboard manager and your downloads folder can all see a key you copy or save, so for a production server you may prefer the OpenSSL command above, which makes the key on the server itself. If you paste an existing key, it is read, removed from the box and used only to sign the request.
To read a key file you already have, use the Key Inspector; for a fresh SSH or PEM key pair without a request, the Key Generator. To check that a request and a key belong together, compare the public key hashes: openssl req -in example.com.csr -noout -pubkey | openssl sha256 and openssl pkey -in example.com.key -pubout | openssl sha256 print the same value.
Related tools
- Certificate DecoderDecode an X.509 certificate, a chain or a CSR: names, SANs, expiry, public key and fingerprints.
- Key GeneratorGenerate an SSH, RSA, ECDSA or Ed25519 key pair and download it as OpenSSH, PEM or JWK.
- Key InspectorRead a PEM, JWK or SSH key, see its fingerprints, convert it and check a key pair.
- Sign & VerifySign text or a file with a private key and verify signatures: RSA, RSA-PSS, ECDSA, Ed25519.
- Hash & HMACMD5, SHA-1, SHA-256, SHA-384, SHA-512 and HMAC for text and files.
- JWT DecoderRead the header, payload and expiry of a JSON Web Token.