bg-tutorials

Cómo generar un CSR en Apache

Este tutorial le muestra cómo generar un CSR en Apache usando la línea de comandos de OpenSSL en el mismo servidor que ejecuta Apache HTTP Server. Creará dos archivos en un solo comando: una nueva clave privada y el CSR (Certificate Signing Request) correspondiente que enviará a su Autoridad de Certificación.

Los pasos siguientes funcionan en todas las distribuciones modernas de Linux que alojan Apache (Ubuntu, Debian, RHEL, AlmaLinux, Rocky Linux, Amazon Linux 2023), ya que todas incluyen OpenSSL 1.1.1 u OpenSSL 3.x. Ambas versiones firman la solicitud con SHA-256 de forma predeterminada, por lo que no necesita añadir ningún indicador de digest. El mismo comando también funciona en FreeBSD y en macOS con Apache.

Paso 1: Conéctese a su servidor Apache

Abra Terminal en macOS o Linux, o PowerShell o Windows Terminal en Windows, y conéctese al servidor mediante SSH. Reemplace el nombre de usuario y el host con los suyos:

ssh your-user@your-apache-server

Genere el CSR en el mismo servidor que alojará el certificado. La clave privada se crea junto al CSR y debe permanecer en ese servidor, por lo que ejecutar el comando en su portátil y luego copiar la clave de un lado a otro va en contra del propósito. También puede realizar el trabajo en un directorio dedicado que pueda encontrar más adelante, por ejemplo:

sudo mkdir -p /etc/ssl/yourdomain
cd /etc/ssl/yourdomain

Paso 2: Genere la clave privada y el CSR

Si ya ha generado su CSR con otra herramienta, pase directamente a instalar el certificado en Apache.

Ejecute el siguiente comando de OpenSSL. Este crea una clave RSA de 2048 bits y un CSR en un solo paso, con el subject y los Subject Alternative Names (SANs) proporcionados en línea para que OpenSSL no se detenga a hacer preguntas:

openssl req -new -newkey rsa:2048 -nodes 
-keyout yourdomain.key 
-out yourdomain.csr 
-subj "/C=US/ST=YourState/L=YourCity/O=YourCompany/CN=yourdomain.com" 
-addext "subjectAltName=DNS:yourdomain.com,DNS:www.yourdomain.com"

Qué hace cada parte:

  • -newkey rsa:2048 genera una nueva clave RSA de 2048 bits. 2048 bits es el mínimo actual para certificados públicos; puede usar rsa:4096 para una clave más grande, o cambiar a ECDSA (ver más abajo).
  • -nodes deja la clave privada sin cifrar para que Apache pueda leerla al iniciarse sin solicitar una frase de contraseña.
  • -keyout y -out nombran los archivos de la clave privada y del CSR.
  • -subj proporciona el subject del certificado. Ponga aquí el nombre real de su empresa, el estado y la ciudad, no los marcadores de posición. CN (Common Name) es su dominio principal.
  • -addext «subjectAltName=…» enumera todos los nombres de host que debe cubrir el certificado. Las CAs públicas validan contra la lista SAN, así que incluya también aquí el Common Name.

Reemplace yourdomain.com con su dominio real en todos los lugares. Para cubrir nombres de host adicionales, añádalos a la lista SAN separados por comas, por ejemplo DNS:api.yourdomain.com. Para un certificado wildcard, incluya tanto el wildcard como el dominio simple: DNS:*.yourdomain.com,DNS:yourdomain.com. Use solo caracteres alfanuméricos en los campos del subject, y use el código oficial de país de dos letras para el campo C.

Si prefiere una clave ECDSA (más pequeña y rápida, con P-256 ampliamente compatible), genere la clave y el CSR de esta manera en su lugar:

openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 -pkeyopt ec_param_enc:named_curve -nodes 
-keyout yourdomain.key 
-out yourdomain.csr 
-subj "/C=US/ST=YourState/L=YourCity/O=YourCompany/CN=yourdomain.com" 
-addext "subjectAltName=DNS:yourdomain.com,DNS:www.yourdomain.com"

Si prefiere responder a las preguntas campo por campo, ejecute openssl req -new -newkey rsa:2048 -nodes -keyout yourdomain.key -out yourdomain.csr sin -subj ni -addext. OpenSSL le pedirá cada campo por turno. Cuando lo haga:

  • Country Name (C): el código ISO de dos letras de su país, por ejemplo US o GB. Para certificados de Validación de Negocio o Validación Extendida, este debe ser el país oficial de registro de su organización.
  • State or Province Name (ST): el nombre completo, por ejemplo California. No lo abrevie.
  • Locality Name (L): la ciudad o localidad, por ejemplo San Francisco.
  • Organization Name (O): el nombre oficial registrado de su empresa, por ejemplo GPI Holding LLC. Para certificados de Validación de Dominio puede introducir NA.
  • Organizational Unit Name (OU): este campo está obsoleto y las CAs públicas lo ignoran. Déjelo en blanco pulsando Enter.
  • Common Name (CN): el nombre de dominio completamente calificado (FQDN) para el que es el certificado, por ejemplo www.yourdomain.com. Para un wildcard, use *.yourdomain.com.
  • Email Address: opcional y no utilizado por las CAs públicas. Puede dejarlo en blanco.
  • A challenge password y An optional company name: ambos son atributos obsoletos que las CAs públicas ignoran. Déjelos en blanco.

Sin el indicador -addext, el CSR resultante no tendrá entradas SAN. Las CAs públicas validan contra la lista SAN y rechazarán (o anularán silenciosamente) una solicitud que no la tenga, por lo que la vía recomendada es el comando en línea con -subj más -addext mostrado arriba.

Paso 3: Localice sus archivos

Liste el directorio actual para confirmar que se crearon ambos archivos:

ls

Debería ver dos archivos nuevos:

  • yourdomain.key: su clave privada. Manténgala en el servidor, haga una copia de seguridad segura y nunca la envíe a nadie, incluida la Autoridad de Certificación. Quien tenga la clave puede suplantar su sitio.
  • yourdomain.csr: su Certificate Signing Request. Este es el archivo que envía al proveedor de SSL.

Restrinja la clave privada para que solo el propietario del archivo pueda leerla:

chmod 600 yourdomain.key

Paso 4: Verifique el CSR (opcional pero recomendado)

Antes de enviarlo, compruebe que el CSR contiene el subject y los SANs correctos, y que su firma es válida. Esto decodifica la solicitud localmente con OpenSSL:

openssl req -noout -text -verify -in yourdomain.csr

Confirme que la línea Subject muestra sus datos, que X509v3 Subject Alternative Name enumera todos los nombres de host que espera, y que la verificación de la firma imprime verify OK. El algoritmo de firma debería leer sha256WithRSAEncryption (o ecdsa-with-SHA256 para una clave ECDSA). Si prefiere no usar la línea de comandos, pegue el CSR en nuestro decodificador de CSR en línea para leer los mismos campos en un navegador.

Paso 5: Envíe su CSR

Para copiar el CSR para su pedido, imprima su contenido:

cat yourdomain.csr

Verá un bloque de texto como este:

-----BEGIN CERTIFICATE REQUEST-----
MIICyzCCAbMCAQAwTDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMQsw...
...(many more lines of base64 characters)...
-----END CERTIFICATE REQUEST-----

Copie todo el bloque, incluidas las líneas —–BEGIN CERTIFICATE REQUEST—– y —–END CERTIFICATE REQUEST—– (cada marcador tiene cinco guiones a cada lado). Ese bloque completo es su CSR. Péguelo en el formulario de pedido durante su compra, y mantenga la clave privada correspondiente en su lugar en el servidor.

Si prefiere no usar la línea de comandos, también puede crear la solicitud con nuestro Generador de CSR en línea. Tenga en cuenta que este genera la clave privada en su navegador, así que guarde esa clave usted mismo y muévala al servidor.

Después de que su CA valide la solicitud, recibirá su certificado. Según el nivel de validación, esto tarda unos minutos para la Validación de Dominio, o hasta varios días hábiles para la Validación de Negocio y la Validación Extendida.

Paso 6: Instale el certificado en Apache

Cuando llegue el certificado, coloque el certificado emitido (incluidos los intermedios concatenados en un solo archivo fullchain) y la clave privada en el servidor, y luego apunte Apache hacia ellos en el virtual host de su sitio:

SSLCertificateFile    /etc/ssl/yourdomain/fullchain.crt
SSLCertificateKeyFile /etc/ssl/yourdomain/yourdomain.key

Apache moderno (2.4.8 y posterior) lee el certificado hoja y cualquier intermedio de un único archivo pasado a SSLCertificateFile, así que concatene su certificado y el paquete de la CA en un solo archivo. La antigua directiva SSLCertificateChainFile está obsoleta y no debe usarse en Apache actual. Pruebe la configuración con apachectl configtest y recargue Apache para aplicar el cambio. Para el flujo de trabajo completo, consulte nuestra guía sobre cómo instalar un certificado SSL en Apache.

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.