Genera una Solicitud de Firma de Certificado (CSR) y su clave privada enteramente en tu navegador, RSA 2048/4096 o ECDSA P-256, con SAN. Nunca se sube.
🔒 Privado por diseño: tu texto se procesa localmente en tu navegador; nada se sube nunca a ningún servidor.
Escrito y mantenido por Javi Morales·Última actualización
Cómo generar una CSR
Pega los datos de tu certificado en el cuadro de texto, un campo por línea, como fieldName: valor, solo commonName (tu dominio, por ejemplo example.com) es obligatorio.
Opcionalmente añade organization, organizationalUnit, locality, state y country (un código de 2 letras, por ejemplo US) para un Nombre Distinguido más completo.
Opcionalmente añade dominios extra con san: www.example.com, api.example.com, tu Common Name se añade siempre automáticamente.
Elige un tipo de clave: RSA 2048 bits (el valor por defecto, ampliamente compatible), RSA 4096 bits o ECDSA P-256.
Pulsa el botón. Se genera un par de claves real y se ensambla a su alrededor una Solicitud de Firma de Certificado PKCS#10 real y autofirmada, al instante, directamente en esta pestaña del navegador.
Copia el bloque CERTIFICATE SIGNING REQUEST y envíalo a tu Autoridad de Certificación. Guarda el bloque PRIVATE KEY en un archivo local y mantenlo en secreto, es lo que demuestra que controlas el certificado una vez emitido, y lo necesitarás para instalarlo en tu servidor.
Sin instalación, sin cuenta y sin subir nada sensible: la clave privada, que es lo más importante, nunca se envía a ningún sitio.
¿Por qué generar una CSR en tu navegador en lugar de en un servidor?
Una CSR siempre viaja junto a una clave privada, la clave privada es para lo que existe la CSR, demostrando a una Autoridad de Certificación (y luego a tu servidor) que realmente controlas el certificado solicitado. Si una web de “generar una CSR” calcula esa clave privada en su propio backend, la clave existió en una máquina que no controlas antes de que la vieras siquiera. Esta herramienta evita ese riesgo por completo: tanto el par de claves como la CSR se construyen usando la propia Web Crypto API de tu navegador más dos pequeñas librerías JavaScript auditadas y con licencia BSD (pkijs y asn1js) que nunca hacen ninguna petición de red. No hay ningún servidor involucrado en generar ni la clave ni la CSR, así que es matemáticamente imposible que una clave que crea esta herramienta haya tocado nada que no sea tu propio dispositivo.
Qué contiene realmente una CSR
Una Solicitud de Firma de Certificado (definida por RFC 2986, también conocida como PKCS#10) agrupa tres cosas:
El sujeto, un Nombre Distinguido que describe quién solicita el certificado: tu dominio (Common Name) y, opcionalmente, tu organización, departamento, ciudad, estado y país.
Tu clave pública, la mitad pública del par de claves generado para esta solicitud.
Una autofirma, hecha con la clave privada correspondiente, demostrando que realmente la posees. Una Autoridad de Certificación comprueba esta firma antes de emitir nada; una CSR con una firma ausente o inválida no vale nada.
Esta herramienta también incrusta una extensión Subject Alternative Name (SAN) que lista cada dominio que debería cubrir el certificado resultante, exigida por prácticamente toda CA moderna, ya que los navegadores ya no confían solo en el Common Name para la comprobación de nombre de host.
RSA frente a ECDSA
RSA 2048 bits (el valor por defecto) es la base establecida y universalmente compatible desde hace tiempo, toda CA, balanceador de carga y cliente heredado la acepta.
RSA 4096 bits es el mismo algoritmo con el doble de tamaño de clave, cambiando un handshake y una generación de clave más lentos por un margen de seguridad mayor.
ECDSA P-256 es la alternativa moderna de curva elíptica: generación de clave casi instantánea, una clave pública y un certificado resultante mucho más pequeños, y soporte de toda CA y navegador actuales. A menos que tengas una razón concreta para necesitar RSA, ECDSA P-256 es una opción perfectamente razonable y más rápida.
Verificar que la CSR es realmente correcta
Como una CSR que parece correcta pero tiene una estructura sutilmente equivocada o una firma rota sería inútil (o peor, silenciosamente rechazada semanas después por una Autoridad de Certificación) el ensamblaje de la CSR de esta herramienta se comprobó contra openssl, una herramienta externa completamente independiente, para los tres tipos de clave soportados: openssl req -verify -noout confirmó una coincidencia genuina de autofirma, y openssl req -text -noout confirmó un sujeto correctamente estructurado y separado por comas y una extensión SAN correctamente decodificada. Esa comprobación detectó un fallo real de codificación durante el desarrollo (mira las preguntas frecuentes) antes de que esta herramienta se publicara.
Tu clave privada nunca sale de tu dispositivo
Cada byte tanto de la CSR como de la clave privada se produce localmente usando la fuente de números aleatorios criptográficamente segura de tu propio navegador (crypto.getRandomValues por debajo), nunca Math.random(), que no es lo bastante segura para nada criptográfico. Nada sobre tu CSR o tu clave privada, ni siquiera el hecho de que generaste una, se transmite, registra ni almacena en ningún sitio por este sitio web.
Usos habituales
Solicitar un nuevo certificado TLS/SSL a una Autoridad de Certificación para un sitio web, API o servicio interno.
Generar una CSR nueva para un certificado multi-dominio (SAN) que cubra un dominio raíz más varios subdominios.
Renovar o sustituir un certificado en un servidor donde prefieras no ejecutar openssl req desde una línea de comandos.
Generar un par de claves SSH en su lugar, si estás configurando acceso a un servidor en lugar de un certificado de sitio web, mira el Generador de Claves SSH.
Configurar credenciales de HTTP Basic Auth junto a tu nueva configuración HTTPS, mira el Generador de .htpasswd.
Cómo funciona, en imágenes
Generador de CSR SSL en pleno proceso: la entrada de ejemplo «cn: sysfenix.com country: ES state: Madrid local…», Key type en RSA 2048-bit (widely compatible, good default).El resultado final: la salida generada «=== CERTIFICATE SIGNING REQUEST (CSR) — submit O…». El enlace de descarga es una URL blob local: el archivo nunca sale de tu dispositivo.
Preguntas frecuentes
¿Qué formato de entrada espera esta herramienta?
Pega un campo por línea, como `fieldName: valor`. Solo `commonName` (o `cn`) es obligatorio, el resto de campos son opcionales:
```
commonName: example.com
organization: Example Inc
organizationalUnit: Departamento de IT
locality: San Francisco
state: California
country: US
san: www.example.com, api.example.com
```
Las líneas en blanco y las que empiezan por `#` se ignoran. También puedes repetir la línea `san:` tantas veces como quieras en lugar de (o además de) listar varios dominios en una línea separados por comas.
¿Por qué esta herramienta usa un simple cuadro de texto en lugar de campos separados para cada valor (CN, organización, etc.)?
Los componentes compartidos de este sitio solo admiten un único cuadro de texto libre más un puñado de opciones desplegables/numéricas/de casilla, no hay ningún componente de formulario multicampo para poner un campo CN, uno de organización, uno de SAN, etc., por separado. En lugar de forzar esta herramienta a un encaje incómodo o construir un componente de formulario específico para una sola herramienta, reutiliza el componente ya existente de pegar-un-bloque-de-texto con una simple convención fieldName: valor, un campo por línea, el mismo enfoque de menor interpretación razonable que usa este sitio siempre que la interfaz ideal de una herramienta aún no existe.
¿Por qué mi Common Name se añade automáticamente a la lista SAN también, aunque no lo haya escrito ahí?
Porque la mayoría de las Autoridades de Certificación lo exigen. Los navegadores modernos y las CA (incluidas Let's Encrypt y todas las CA comerciales importantes) generalmente ignoran el Common Name para la comprobación de nombre de host y solo confían en la extensión Subject Alternative Name (SAN), una CSR cuyo CN no esté también listado en SAN es una causa habitual de que una CSR sea rechazada o de que el certificado resultante no funcione como se espera. Esta herramienta añade tu Common Name a la lista SAN automáticamente (y elimina cualquier duplicado exacto) para que no tengas que recordar repetirlo tú mismo.
¿Qué tipo de clave debería elegir, RSA 2048, RSA 4096 o ECDSA P-256?
RSA 2048 bits (el valor por defecto) es la opción más segura y universalmente compatible, toda Autoridad de Certificación y todo servidor/balanceador de carga la acepta. RSA 4096 bits cambia un tiempo de generación de clave más lento (y handshakes TLS ligeramente más lentos) por un margen de seguridad mayor, útil sobre todo si una política concreta lo exige. ECDSA P-256 es la opción moderna: genera casi al instante, produce una clave y un certificado mucho más pequeños, y la aceptan prácticamente todas las CA actuales (incluida Let's Encrypt) y todos los navegadores modernos, una gran opción a menos que necesites concretamente dar soporte a clientes muy antiguos o a una CA que solo acepte RSA.
¿Se verificó de verdad que el formato de la CSR funciona con las herramientas de una Autoridad de Certificación real, o podría estar sutilmente equivocado?
Verificado de forma concreta con el propio `openssl` de esta máquina, una herramienta externa completamente independiente, no solo leyendo la especificación. Cada tipo de clave que soporta esta herramienta se comprobó con `openssl req -verify -text -noout`, que confirmó tanto "Certificate request self-signature verify OK" como un sujeto correctamente formado y separado por comas (por ejemplo, `C=US, ST=California, L=San Francisco, O=Example Inc, OU=IT, CN=example.com`) y una extensión `X509v3 Subject Alternative Name` correctamente decodificada. Esa comprobación de separación por comas realmente detectó un fallo real durante el desarrollo, mira la siguiente pregunta.
¿Qué salió mal durante el desarrollo, y cómo se detectó?
Una versión temprana metía cada campo del sujeto (Common Name, Organización, País, etc.) en la lista de atributos plana de la librería subyacente y dejaba que construyera la estructura ASN.1 automáticamente. Eso producía una CSR que *parecía* correcta en el propio código de esta herramienta pero que, al decodificarla con `openssl req -text`, resultaba ser un único grupo de atributos combinados (`CN=example.com + O=Example Inc + C=US`, unidos con `+`) en lugar de la estructura convencional de Nombre Distinguido separada por comas que espera toda CA y navegador (`C=US, O=Example Inc, CN=example.com`). Se corrigió construyendo directamente la estructura ASN.1 correcta (una secuencia de grupos separados de un solo atributo) y se volvió a verificar después con `openssl`. Este es exactamente el tipo de error de codificación sutil y fácil de pasar por alto que solo se detecta al comprobarlo contra una herramienta real e independiente, no confiando solo en la documentación de una API.
¿Esta herramienta envía algo a una Autoridad de Certificación, o comprueba la propiedad del dominio?
No. Esta herramienta solo genera la CSR y su clave privada correspondiente, ambas enteramente dentro de tu pestaña del navegador. Enviar la CSR a una Autoridad de Certificación real (o a un cliente ACME como Certbot, para Let's Encrypt), demostrar que controlas el dominio y recibir el certificado firmado de vuelta son todos pasos separados que haces después con la CA que elijas.
¿Esta herramienta cifra la clave privada con una contraseña?
No, no actualmente. La clave privada PKCS#8 generada no está cifrada, el mismo alcance honesto que usa el Generador de Claves SSH de este sitio por el mismo motivo, añadir cifrado con frase de paso correctamente necesitaría el mismo nivel de verificación externa independiente que recibió el propio formato de la CSR, y enviar una capa de cifrado sin verificar para algo tan sensible no compensa el riesgo. Si necesitas una clave protegida con frase de paso, genera aquí y luego ejecuta localmente `openssl rsa -aes256 -in key.pem -out key-encrypted.pem` (o el equivalente para ECDSA) para añadir una.
Genera un hash bcrypt de contraseña o verifica una contraseña contra un hash existente, todo en tu navegador. Las contraseñas nunca salen de tu dispositivo.
Genera reglas válidas de Nginx o .htaccess de Apache para HTTPS, redirecciones www, cabeceras de seguridad, caché y rutas SPA. Sin ida y vuelta al servidor.