P-256 Certificate Signing Request Builder
Build a real SHA-256 signed PKCS10 CSR locally from a selected P-256 private-key File, an original subject and requested DNS names. Download PEM or a public request ZIP.
Loading tool…
How to use P-256 Certificate Signing Request Builder
Prepare a certificate request without pasting a private key into a server form. Choose a supported unencrypted P-256 key, enter the subject and literal DNS names you want to request, and download the actual signed request. A local signature self-check confirms the supplied private scalar matches its included public point. You decide whether to submit the public request to a certificate authority elsewhere.
- Choose your supported local P-256 private-key File. Load example instead to use an explicitly published scalar-1 demonstration key; never use it for a real certificate.
- Enter the literal common name, optional organization/country and each requested DNS name. These public values will be visible in the CSR.
- Run the tool. Its same-origin Worker imports fixed code before receiving the key, signs the exact DER request info and verifies that signature against the supplied public point.
- Review the subject, DNS list and public-key fingerprint. Download the PEM request or the ZIP containing request.csr, public-key.pem and request-evidence.json. No private key is included; submission to a CA is a separate action.
Good to know
- One actual File, 1–8,192 bytes, with a 5-second read limit. Strict unencrypted P-256 PKCS8 PEM/DER (DER at most 4,096 bytes) or a restricted private EC JWK object. No RSA, other curves, encrypted PEM, SEC1 standalone keys, certificate files, JWK wrappers or external CSR parsing. A wrong or unsupported key refuses the entire request without echoing source fragments.
- PKCS8 version 0 only, with ecPublicKey and named P-256 outer parameters, inner SEC1 version 1, exactly 32 scalar bytes and a required uncompressed 65-byte public point. Optional inner curve parameters must agree. Attributes, extra ASN.1 fields, indefinite or noncanonical lengths and compressed/missing public points are refused.
- Private JWK accepts only kty, crv, x, y, d and optional alg=ES256, use=sig, boolean ext and key_ops=[sign]. Coordinates/scalar are canonical 32-byte Base64url values. Duplicate or unknown keys refuse. Native imports are nonextractable; a fresh self-signature check must match the supplied public point.
- Subject is fixed separate RDN order country, organization, common name; no arbitrary DN syntax, email, challengePassword or custom extensions. CN/organization keep their validated original Unicode without normalization. Each has at most 64 UTF-16 units. DNS input is at most 6,000 ASCII characters and 20 distinct entries; there is no public-suffix, domain-control, CA-policy or country-registry check.
- Output is a real version-0 PKCS10 request using ECDSA with SHA-256, canonical DER r/s signature and an extensionRequest attribute for dNSName SANs. There is no certificate issuance, certificate validation, server installation, key generation, external request inspection or cryptographic trust certification.
- All fixed runtime imports finish before a 10-second Worker-ready deadline. Key bytes are then transferred for a separate 2-second computation deadline. Completion, errors and timeouts terminate Worker ownership. A supported secure Web Crypto context is required. Reset cleanup is managed by the platform; late file reads cannot be forcibly cancelled.
- The complete DER request is bounded to 16 KiB, public evidence to 50,000 UTF-16 units and the final artifact to 100,000 bytes. Any invalid input or budget failure leaves no partial download. The only fingerprint is SHA-256 of the public SPKI.
- Private keys are not uploaded, saved by default, added to evidence or included in downloads. Owned byte buffers are cleared where possible, but JavaScript strings, browser internals and imported key memory cannot be guaranteed securely erased. Public request files disclose the subject, DNS names, public key and signature. Treat your key and any downloaded request according to your own requirements.
Common questions
Does the example create a safe private key for a real site?
No. It is a deliberately published demonstration key whose scalar is 1. Use an independently generated private key you control for real requests. The example proves the complete file and signing workflow.
Will this get a certificate or verify domain ownership?
No. It creates and checks the signature of a request. A CA independently decides what identity evidence and request profile it accepts; this page does not submit anything.
Why is a valid PKCS8 key without its public point refused?
This selected local workflow requires an included public point and verifies that it matches the private signing key. It does not export the imported private key or implement elliptic-curve point derivation in JavaScript.
What is in the ZIP?
Only the signed CSR PEM, public SPKI PEM and the readable public request evidence. There is no private key, private-key fingerprint, original filename or private source excerpt.
Keep going with related tools
All developer →Development Key Pair Generator
Generate local test signing keys with an explicit private-key export choice.
DeveloperJWK and PEM Public Key Converter
Convert RSA or P-256 public keys between JWK JSON and SPKI PEM locally.
FilesDetached File Signature Workbench
Sign exact local file bytes or verify a detached signature with a supplied JWK.
DeveloperX.509 Certificate Field Inspector
Read bounded public certificate fields, selected extensions and SHA-256 fingerprints from local PEM certificates or DER bytes.