📜 CSR Generator

Build a PKCS#10 Certificate Signing Request and its matching private key for RSA or ECDSA — entirely inside your browser. The key pair is generated, the request is assembled and signed, and nothing is ever sent to a server.

Usually the exact domain the certificate will protect. Can also be a person or device name for client/internal certificates.
2-letter ISO code, e.g. US, IN, GB.
Comma-separated hostnames. Your Common Name is added here automatically if you leave it out — modern browsers only trust names listed in SAN.

What a CSR Actually Is, and Why This Generator Runs Entirely in Your Browser

A Certificate Signing Request (CSR) is a small, standardized document — formally PKCS#10, defined in RFC 2986 — that you hand to a Certificate Authority (CA) when you want an SSL/TLS certificate issued. It bundles your identifying details (domain name, organization, location) together with a public key, and is signed with the matching private key to prove you actually control that key pair. The CA never sees your private key at all; it only ever receives the CSR. Generating both locally, in the browser's own JavaScript engine via the Web Crypto API, means the private key is created and used for signing without ever crossing a network boundary — the same guarantee you'd get running openssl req on your own machine, just without needing OpenSSL installed.

⭐
ToolsNovaHub Pro Tip
Download the private key the moment it's generated, before you do anything else. There is no "recover it later" — the page holds it only in memory, and refreshing or navigating away discards it permanently.
⚠️
Common Beginner Mistake
Submitting a CSR to the CA but keeping the private key on the same machine you're about to wipe or decommission. The certificate is worthless without the key it was requested with — back the key up somewhere durable before the server it lives on changes.

How the Generator Builds a Standards-Compliant Request

The tool generates an RSA or ECDSA key pair with crypto.subtle.generateKey(), exports the public key in SubjectPublicKeyInfo format, and assembles a CertificationRequestInfo structure — version, subject distinguished name, public key info, and (if you set any SAN entries) a requested-extensions attribute — using a minimal ASN.1 DER encoder written specifically for this page. That structure is signed with crypto.subtle.sign() using the private key, and the signed CSR plus the exported private key are both Base64-encoded into standard PEM blocks. The output is byte-for-byte a normal PKCS#10 request: it verifies cleanly with openssl req -in file.csr -noout -verify and decodes with openssl req -text exactly like one produced by OpenSSL, a CA's own portal, or your hosting control panel.

RSA vs ECDSA for a New Key Pair

Key TypeHandshake CostCompatibilityBest For
RSA 2048HigherUniversal — every CA, every client back to very old browsersDefault choice, public sites needing maximum reach
RSA 4096HighestUniversal, same as 2048Long-lived internal CAs, specific compliance requirements
ECDSA P-256LowestAll current browsers and modern CAs (Let's Encrypt, DigiCert, etc.)Public web servers wanting faster TLS handshakes at equivalent security
ECDSA P-384LowSame as P-256, slightly less universal on older embedded clientsHigher assurance ECC deployments

RSA 2048-bit and ECDSA P-256 are both considered secure for the foreseeable future by every major CA and browser vendor; the choice mostly comes down to compatibility with whatever is on the other end of the connection. If you don't have a specific reason to pick otherwise, RSA 2048 remains the conservative default this generator preselects.

What Each Subject Field Is Actually Used For

Common Name
The primary name the certificate is issued for. For a website this is the exact domain; browsers now validate against SAN rather than this field, but CAs still require it.
Organization
Your company or organization's legal name. Cosmetic for Domain Validation certificates; verified against public records for Organization or Extended Validation.
Organizational Unit
An internal department or division label, e.g. "IT" or "Engineering." Deprecated by the CA/Browser Forum for public certificates and increasingly ignored, but still accepted by most CAs.
City / State / Country
Physical location fields, mainly relevant for OV/EV validation and internal PKI record-keeping. Country must be a 2-letter ISO 3166-1 code.
Email Address
Optional contact address embedded in the subject. Rarely required by public CAs today; more common in internal/enterprise certificate templates.
SAN Entries
Every hostname the issued certificate needs to be valid for. This is the field browsers actually check — a name missing here will fail hostname verification even if it's the Common Name.

Why the SAN Field Is the One That Actually Matters

Since 2020, the CA/Browser Forum's baseline requirements mean publicly trusted certificates are only checked against the Subject Alternative Name extension — the Common Name field is retained for backward compatibility but no longer trusted for hostname matching on its own. This is why the generator automatically folds your Common Name into the SAN list if you don't add it explicitly: a certificate whose only name lives in CN and not SAN will show a "not secure" / name-mismatch warning in every current browser, even though the CN is technically correct. If you need a certificate to cover both the bare domain and a www subdomain, both need their own SAN entry — they aren't inferred from each other.

When You'll Actually Need to Generate a CSR

Most people who land on this page are in one of a few specific situations. A solo developer renewing a certificate through a CA that doesn't auto-generate keys on their behalf — some paid CAs and enterprise portals still expect you to submit your own CSR rather than handling key generation server-side. A sysadmin setting up mutual TLS (mTLS) between an internal API and its clients, where each service needs its own certificate signed by a private internal CA rather than a public one. Someone requesting an Extended Validation (EV) or Organization Validation (OV) certificate, which almost always requires manually submitting a CSR as part of the vetting workflow rather than using ACME automation. And occasionally, someone migrating a certificate to a new server who needs a fresh key pair because the original private key isn't portable or wasn't backed up — in that case a new CSR against a new key is the only way forward, since a certificate can't be re-keyed after issuance.

What to Do With the CSR and Key After Generating Them

Download both files immediately using the buttons above. Submit the CSR's contents — the full PEM block, including the BEGIN/END lines — into your CA's request form or ACME client configuration; it's a plain-text document meant to be pasted or uploaded as-is. Keep the private key file somewhere access-controlled: on the server that will actually terminate TLS, with restrictive file permissions, or in a secrets manager if your deployment uses one. When the CA finishes validation, they'll send back a signed certificate; that certificate is only usable paired with this exact private key, so the two need to end up on the same server together. Once you have it, the Certificate Decoder confirms exactly what the CA issued — its validity dates, actual SAN list, and extensions — before you deploy it anywhere.

Why the Private Key Never Leaves Your Browser

Web Crypto API key generation happens inside the browser's own cryptographic implementation — the same subsystem used to negotiate the HTTPS connection to this very page — and the DER encoding, signing, and PEM formatting in this tool are plain JavaScript with no network calls anywhere in the code path. There's no form submission, no background request, and no server-side component that ever sees the key material. This is a meaningful difference from copy-pasting your details into a web form that generates a key pair server-side and mails or displays it back to you; here, the private key simply never exists outside your own device's memory until you choose to download it.

If Your CA Rejects the CSR

❌ Common Name doesn't match a domain you've verified
CAs check domain control before issuing. If the Common Name or any SAN entry is a domain you haven't proven ownership of (via DNS TXT record, HTTP file, or email), the request will be held or rejected until validation completes.
❌ A required SAN entry is missing
If your site serves both example.com and www.example.com, both need to be listed in SAN — a certificate issued for only one will show warnings on the other.
❌ Key type or size not accepted
A small number of CAs, particularly older enterprise or government PKI systems, still only accept RSA and reject ECDSA keys outright, or enforce a minimum RSA size above 2048-bit. Check your CA's documentation before generating if you're unsure.
❌ Organization name doesn't match official records
Only relevant for OV/EV certificates — the CA cross-checks Organization against business registries, and a mismatch (abbreviation, old legal name, missing suffix like "Inc" or "Ltd") triggers manual review or rejection.

Related Reading

For a broader look at what SSL/TLS certificates are and how the chain of trust works, see What Is SSL and Certificate Security & Trust Verification. For the difference between DV, OV, and EV validation levels referenced above, read SSL Validation Levels: EV, OV, DV. For the underlying protocol and cipher choices a certificate gets used with once issued, see TLS/SSL Protocol & Certificate Types and the companion guides on disabling legacy TLS versions. If a certificate on your domain has already expired, Fix an Expired SSL Certificate covers the reissuance path this CSR generator feeds into.

FAQ

No. Every key pair is generated inside your browser using the Web Crypto API, and the CSR is built and signed locally too — nothing is transmitted anywhere. Closing the tab without downloading the key means it's gone for good, since it was never stored server-side to begin with.
The private key is the secret half of your key pair and must never be shared with anyone. The CSR is a public request document — built from your subject details plus the matching public key, and signed with the private key to prove you control it — that you submit to a Certificate Authority to get a signed certificate back.
RSA 2048-bit is the safest default for broad compatibility with older clients and every CA. ECDSA P-256 produces a smaller key and faster TLS handshakes for the same practical security level, and is well supported by modern CAs and all current browsers — a good choice unless a specific legacy system you support requires RSA.
Since 2020, the CA/Browser Forum baseline requirements mean browsers only trust names listed in the Subject Alternative Name extension — the Common Name field alone is effectively cosmetic now. Adding it to SAN automatically prevents a certificate that browsers would otherwise flag as not matching the site.
Yes — enter *.example.com as the Common Name or in the SAN field. Whether your CA actually issues a wildcard depends on their validation process (usually DNS-based), not on anything in the CSR itself.
2048-bit is the current industry-standard minimum and is accepted by every major CA. 4096-bit adds meaningfully more CPU cost to every TLS handshake for a security margin most sites don't need — reasonable for long-lived internal CAs or specific compliance mandates, but overkill for a typical public website.
No. The entire generation process — key pair creation, ASN.1 encoding, and signing — happens in your browser's JavaScript engine. No form data is sent to any server, logged, or retained.
The most common causes are a Common Name that doesn't match a domain you've verified control of, a missing SAN entry for a name the certificate needs to cover, or an unsupported key type/size for that specific CA's policy. See the troubleshooting section above for the full list.
You can generate one — the tool doesn't restrict what you type into Common Name or SAN — but public CAs will not issue certificates for private/internal-only names or RFC 1918 IP addresses. Those are only valid with an internal/private CA.
Structurally yes — it's a standard PKCS#10 request built with the same ASN.1 DER encoding rules and signed the same way, verifiable with openssl req -verify like any other CSR. The Web Crypto API used to generate the key pair is the same cryptographic engine browsers rely on for HTTPS itself.
You'll need to generate a brand new CSR and key pair and get the CA to reissue the certificate against the new public key — the old certificate can't be reused with a different private key. Most CAs support free reissuance during the certificate's validity period for exactly this reason.
For Domain Validation (DV) certificates it's cosmetic and rarely checked. For Organization Validation (OV) or Extended Validation (EV) certificates, the CA will verify it against official business registries, so it needs to match your registered legal name precisely or the request will be flagged during vetting.