bg-tutorials

Cómo generar un CSR para un certificado de firma de código con OpenSSL

Esta guía explica cómo se genera una Solicitud de Firma de Certificado (CSR) para un certificado de firma de código cuando trabaja con OpenSSL, y, tan importante como eso, cuándo ese enfoque ya no aplica. Desde el 1 de junio de 2023, las reglas para las claves de firma de código cambiaron, por lo que el antiguo flujo de trabajo de OpenSSL basado únicamente en software ya no es aceptado por las Autoridades de Certificación para un certificado de firma de código de confianza pública. Lea primero el requisito a continuación y luego siga la ruta que corresponda a cómo se almacena su clave.

Importante: las claves de firma de código deben residir en hardware

Según los Requisitos de Referencia del CA/Browser Forum para la Firma de Código, vigentes desde el 1 de junio de 2023, la clave privada de todo certificado de firma de código de confianza pública, tanto estándar (OV) como de Validación Extendida (EV), debe generarse y almacenarse en un módulo criptográfico de hardware que cumpla con FIPS 140-2 Nivel 2, Common Criteria EAL4+, o un estándar equivalente. La clave debe ser no exportable. La firma de código EV siempre requirió hardware; esta regla extendió la misma protección a los certificados estándar.

La consecuencia práctica: una clave privada y una CSR generadas puramente en software con OpenSSL simple en una laptop o servidor ya no se aceptan para emitir un certificado de firma de código de confianza pública. Las Autoridades de Certificación han dejado de admitir la generación de claves basada en navegador y las CSR de software para estos productos. Su clave ahora reside en uno de estos lugares:

  • Un token de hardware que se le envía (por ejemplo, un YubiKey o un eToken SafeNet/Thales). Con el método de entrega de token + envío, la Autoridad de Certificación genera la clave en el dispositivo y gestiona la CSR, por lo que usted no crea una con OpenSSL.
  • Un Módulo de Seguridad de Hardware (HSM) que usted controla, ya sea local o en la nube. Aquí usted genera la clave dentro del HSM y produce una CSR más una atestación de clave que demuestra que la clave se creó en hardware.
  • Un servicio de firma en la nube que mantiene la clave en un HSM conforme en su nombre.

Elija su ruta según cómo planee recibir y almacenar el certificado. Para obtener una visión general, consulte la guía de métodos de entrega de firma de código. Para los pasos de CSR respaldados por hardware y de atestación, siga la guía que corresponda a su dispositivo:

Si utiliza un HSM diferente, genere la CSR con las herramientas de ese proveedor para que la clave permanezca en hardware. El comando de OpenSSL req que se muestra más adelante todavía tiene un papel en esos flujos de trabajo cuando OpenSSL controla el HSM a través de un proveedor o motor, pero debe hacer referencia a una clave que ya reside en el módulo, nunca a un archivo de clave de software simple para un certificado de confianza pública.

Cuándo el método de OpenSSL en software todavía aplica

El flujo de trabajo en software descrito a continuación produce un archivo de clave en disco. Eso es aceptable solo en casos que no sean un certificado de firma de código de confianza pública, como:

  • Firma interna o de prueba con una CA privada/empresarial, donde su propia política, y no las reglas públicas del CA/Browser Forum, rige el almacenamiento de claves.
  • Aprender la estructura de comandos de OpenSSL antes de pasar a un token o HSM.
  • Preparar los detalles del sujeto y la sintaxis de comandos que reutilizará al generar la CSR real con su clave de hardware.

No envíe una clave y una CSR generadas por software a una Autoridad de Certificación pública para un certificado de firma de código OV o EV. Será rechazado. Con este límite claro, aquí está el proceso de OpenSSL y los comandos involucrados.

1. Descargue e instale OpenSSL

Si OpenSSL no está ya en su computadora, descargue una versión actual (OpenSSL 3.x o posterior) para su sistema operativo e instálela. macOS y la mayoría de las distribuciones de Linux ya incluyen OpenSSL; en Windows normalmente se instala una compilación de terceros. Confirme la instalación y la versión con:

openssl version

2. Abra una terminal y cargue OpenSSL

En Windows, presione la tecla Windows + R, escriba cmd, y presione Enter. Para comandos que escriben archivos en carpetas protegidas, ejecute el Símbolo del sistema como administrador: haga clic derecho en el icono del Símbolo del sistema y elija Ejecutar como administrador. También puede escribir cmd en la búsqueda de la barra de tareas y abrir el Símbolo del sistema desde ahí. En macOS o Linux, abra su aplicación de terminal.

Si el binario de OpenSSL no está en la ruta del sistema en Windows, primero cámbiese a su carpeta de instalación, usando la ruta que corresponda a su compilación:

cd OpenSSL-Win32bin
cd "Program FilesOpenSSL-Win64bin"

3. Genere la clave privada y la CSR

Primero genere la clave privada. Los certificados de firma de código requieren una clave sólida: use RSA de 3072 bits (o más), que es el mínimo común para firma de código, o una clave ECDSA en la curva P-256. Para crear una clave RSA de 3072 bits:

openssl genrsa -out code_signing_key.key 3072

Luego genere la CSR a partir de esa clave. OpenSSL utiliza SHA-256 para la firma de la solicitud de forma predeterminada en las versiones actuales:

openssl req -new -key code_signing_key.key -out code_signing_csr.txt

4. Complete los campos de la CSR

OpenSSL solicita los detalles que identifican al titular del certificado. Ingrese información precisa y actualizada que coincida con los registros legales de su organización, porque la CA la valida. Reemplace los ejemplos con sus propios datos:

  • País (C): el código de país de dos letras donde su empresa está registrada o donde usted reside, por ejemplo US.
  • Estado o Provincia (ST): el nombre completo del estado o provincia, por ejemplo California.
  • Localidad (L): la ciudad donde está registrada su empresa, por ejemplo San Jose.
  • Nombre de la organización (O): el nombre oficial y legal de su organización, o su nombre legal completo si el certificado es para una persona individual, por ejemplo GPI Holding LLC.
  • Unidad organizativa (OU): el departamento que solicita el certificado, por ejemplo IT. Este campo es opcional.
  • Nombre común (CN): el nombre legal de su organización, o su nombre completo para un certificado individual. Para la firma de código, el Nombre común es la identidad que aparece como el editor.
  • Dirección de correo electrónico: una dirección de correo electrónico de contacto válida.

Puede dejar en blanco los campos opcionales de contraseña de desafío y nombre de empresa opcional: simplemente presione Enter en esas indicaciones.

También puede combinar los pasos 3 y 4 en un solo comando. El indicador -subj proporciona el sujeto en línea para que OpenSSL no solicite datos, y -nodes deja la clave sin cifrar en el disco (OpenSSL 3.x renombró este indicador como -noenc, pero -nodes sigue funcionando). Tenga en cuenta que el valor usa comillas rectas, no curvas, y toda la cadena está encerrada en un solo par de comillas:

openssl req -new -newkey rsa:3072 -nodes -keyout code_signing_key.key -out code_signing_csr.txt -subj "/C=US/ST=California/L=San Jose/O=GPI Holding LLC/OU=IT/CN=GPI Holding LLC"

5. Verifique la CSR

Antes de enviar cualquier cosa, confirme que la CSR sea válida y que sus detalles sean correctos. Este comando imprime el sujeto decodificado y verifica la firma de la solicitud:

openssl req -noout -text -verify -in code_signing_csr.txt

Verifique que la línea de Sujeto (Subject) muestre el país, la organización y el nombre común exactamente como lo desea, que el tamaño de la clave pública sea de 3072 bits o más (o una clave ECDSA), y que el algoritmo de firma sea SHA-256. También debería ver un mensaje de verify OK, que confirma que la CSR fue firmada por su clave privada correspondiente.

6. Mueva la clave privada y la CSR a un directorio seguro

Mueva la clave privada y la CSR fuera de la carpeta de OpenSSL a un directorio que usted controle. Mantenga la clave privada en secreto y nunca la comparta con nadie fuera de su organización: cualquiera que la posea puede firmar software en su nombre. En Windows, cree una carpeta y mueva los archivos hacia ella:

md c:codesigningcertificates
move code_signing_key.key c:codesigningcertificates
move code_signing_csr.txt c:codesigningcertificates

7. Envíe la CSR a su CA

Abra el archivo CSR en cualquier editor de texto plano, como el Bloc de notas, y copie todo su contenido, incluidas las líneas —–BEGIN CERTIFICATE REQUEST—– y —–END CERTIFICATE REQUEST—–, en el formulario de inscripción durante su pedido de certificado. Un bloque de CSR se ve así:

-----BEGIN CERTIFICATE REQUEST-----
MIICvDCCAaQCAQAw...
...base64 encoded request...
-----END CERTIFICATE REQUEST-----

Recuerde la regla del inicio de esta guía: para un certificado de firma de código de confianza pública, la CSR que envíe debe corresponder a una clave generada y mantenida en hardware conforme. Si generó una clave de software con los pasos anteriores, úsela solo para firma interna o de prueba. Para un pedido de CA pública, genere la CSR desde su token o HSM siguiendo la guía de YubiKey o Luna HSM, o deje que la CA genere la clave cuando elija el método de entrega de token + envío.

Para la sintaxis general de OpenSSL más allá de la creación de CSR, la referencia de comandos de OpenSSL es un complemento útil. También puede explorar más tutoriales de OpenSSL y tutoriales de firma de código, o leer otras formas de generar una CSR.

Ahorre un 10% en certificados SSL al realizar su pedido hoy mismo.

Emisión rápida, cifrado potente, 99,99% de confianza del navegador, asistencia dedicada y garantía de devolución del dinero en 25 días. Código del cupón: SAVE10

Una imagen detallada de un dragón en vuelo
Escrito por

Redactor de contenidos experimentado especializado en Certificados SSL. Transformar temas complejos de ciberseguridad en contenido claro y atractivo. Contribuir a mejorar la seguridad digital a través de narrativas impactantes.