Este tutorial te muestra cómo generar un CSR en lighttpd usando la línea de comandos de OpenSSL en el mismo servidor que ejecuta el servidor web lighttpd. Crearás dos archivos con un solo comando: una nueva clave privada y el CSR (Certificate Signing Request) correspondiente que enviarás a tu Autoridad de Certificación.
Los pasos que se muestran a continuación funcionan en todas las distribuciones modernas de Linux que incluyen lighttpd (Debian, Ubuntu, RHEL, AlmaLinux, Rocky Linux, Fedora, openSUSE, Alpine), 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 necesitas añadir ningún indicador de resumen (digest). El mismo comando también funciona en FreeBSD y en macOS con lighttpd.
Paso 1: Conéctate a tu servidor lighttpd
Abre Terminal en macOS o Linux, o PowerShell o Windows Terminal en Windows, y conéctate al servidor mediante SSH. Reemplaza el nombre de usuario y el host por los tuyos:
ssh your-user@your-lighttpd-server
Genera el CSR en el mismo servidor que alojará el certificado. La clave privada se crea junto al CSR y debe permanecer en ese servidor, así que ejecutar el comando en tu portátil y luego copiar la clave de un lado a otro anula el propósito. También puedes hacer el trabajo en un directorio dedicado que puedas encontrar más adelante, por ejemplo:
sudo mkdir -p /etc/lighttpd/ssl
cd /etc/lighttpd/ssl
Paso 2: Genera la clave privada y el CSR
Si ya has generado tu CSR con otra herramienta, pasa directamente a instalar el certificado en lighttpd.
Ejecuta el siguiente comando de OpenSSL. Crea una clave RSA de 2048 bits y un CSR en un solo paso, con el asunto (subject) y los Subject Alternative Names (SAN) incluidos directamente 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; puedes 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 lighttpd pueda leerla al iniciar sin pedir una frase de contraseña.
- -keyout y -out nombran la clave privada y los archivos del CSR.
- -subj proporciona el asunto (subject) del certificado. Coloca aquí el nombre real de tu empresa, tu estado y tu ciudad, no los marcadores de posición. CN (Common Name) es tu dominio principal.
- -addext «subjectAltName=…» enumera todos los nombres de host que el certificado debe cubrir. Las CA públicas validan según la lista SAN, así que incluye también aquí el Common Name.
Reemplaza yourdomain.com por tu dominio real en todo el comando. Para cubrir nombres de host adicionales, añádelos a la lista SAN separados por comas, por ejemplo DNS:api.yourdomain.com. Para un certificado comodín (wildcard), incluye tanto el comodín como el dominio base: DNS:*.yourdomain.com,DNS:yourdomain.com. Usa solo caracteres alfanuméricos en los campos del asunto, y usa el código de país oficial de dos letras para el campo C.
Si prefieres una clave ECDSA (más pequeña y rápida, con P-256 ampliamente compatible), genera la clave y el CSR de esta manera:
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"
lighttpd admite tanto certificados RSA como ECDSA a través de mod_openssl, y puedes servir ambos en el mismo socket enumerando dos pares de directivas ssl.pemfile y ssl.privkey.
Si prefieres responder a las preguntas campo por campo, ejecuta openssl req -new -newkey rsa:2048 -nodes -keyout yourdomain.key -out yourdomain.csr sin -subj ni -addext. OpenSSL pedirá cada campo por turno. Cuando lo haga:
- Country Name (C): el código ISO de dos letras de tu país, por ejemplo US o GB. Para certificados de Validación de Empresa o Validación Extendida, este debe ser el país oficial de registro de tu organización.
- State or Province Name (ST): el nombre completo, por ejemplo Tennessee. No lo abrevies.
- Locality Name (L): la ciudad o localidad, por ejemplo Nashville.
- Organization Name (O): el nombre oficial registrado de tu empresa, por ejemplo Your Company LLC. Para certificados de Validación de Dominio puedes escribir NA.
- Organizational Unit Name (OU): este campo está obsoleto y las CA públicas lo ignoran. Déjalo 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 comodín, usa *.yourdomain.com.
- Email Address: opcional y no lo usan las CA públicas. Puedes dejarlo en blanco.
- A challenge password y An optional company name: ambos son atributos obsoletos que las CA públicas ignoran. Déjalos en blanco.
Sin el indicador -addext, el CSR resultante no tendrá entradas SAN. Las CA públicas validan según la lista SAN y rechazarán (o anularán silenciosamente) una solicitud sin ella, por lo que el camino recomendado es el comando en línea con -subj más -addext mostrado arriba.
Paso 3: Localiza tus archivos
Lista el directorio actual para confirmar que se crearon ambos archivos:
ls
Deberías ver dos archivos nuevos:
- yourdomain.key: tu clave privada. Mantenla en el servidor, haz una copia de seguridad segura y nunca la envíes a nadie, incluida la Autoridad de Certificación. Quien posea la clave puede hacerse pasar por tu sitio.
- yourdomain.csr: tu Certificate Signing Request. Este es el archivo que envías al proveedor de SSL.
Restringe la clave privada para que solo el propietario del archivo pueda leerla:
chmod 600 yourdomain.key
Paso 4: Verifica el CSR (opcional pero recomendado)
Antes de enviarlo, comprueba que el CSR contiene el asunto y los SAN correctos y que su firma es válida. Esto decodifica la solicitud localmente con OpenSSL:
openssl req -noout -text -verify -in yourdomain.csr
Confirma que la línea Subject muestra tus datos, que X509v3 Subject Alternative Name enumera todos los nombres de host que esperas, y que la comprobación de firma muestra verify OK. El algoritmo de firma debería mostrar sha256WithRSAEncryption (o ecdsa-with-SHA256 para una clave ECDSA). Si prefieres no usar la línea de comandos, pega el CSR en nuestro decodificador de CSR en línea para leer los mismos campos en un navegador.
Paso 5: Envía tu CSR
Para copiar el CSR de tu pedido, imprime su contenido:
cat yourdomain.csr
Verás un bloque de texto como este:
-----BEGIN CERTIFICATE REQUEST-----
MIICyzCCAbMCAQAwTDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMQsw...
...(many more lines of base64 characters)...
-----END CERTIFICATE REQUEST-----
Copia el bloque completo, incluidas las líneas —–BEGIN CERTIFICATE REQUEST—– y —–END CERTIFICATE REQUEST—– (cada marcador tiene cinco guiones a cada lado). Ese bloque completo es tu CSR. Pégalo en el formulario de pedido durante tu compra, y mantén la clave privada correspondiente en su lugar en el servidor.
Si prefieres no usar la línea de comandos, también puedes crear la solicitud con nuestro generador de CSR en línea. Ten en cuenta que este genera la clave privada en tu navegador, así que guarda tú mismo esa clave y muévela al servidor.
Después de que tu CA valide la solicitud, recibirás tu 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 Empresa y la Validación Extendida.
Paso 6: Instala el certificado en lighttpd
Cuando llegue el certificado, coloca el certificado emitido y su cadena intermedia en el servidor junto a la clave privada, y luego indica a lighttpd dónde encontrarlos en tu bloque de socket TLS. En las versiones actuales de lighttpd, el soporte TLS se encuentra en mod_openssl, y el formato recomendado (desde que lighttpd 1.4.53 introdujo ssl.privkey) mantiene el certificado más la cadena en un archivo y la clave privada en un archivo separado:
server.modules += ( "mod_openssl" )
$SERVER["socket"] == ":443" {
ssl.engine = "enable"
ssl.pemfile = "/etc/lighttpd/ssl/yourdomain.fullchain.pem"
ssl.privkey = "/etc/lighttpd/ssl/yourdomain.key"
}
El archivo ssl.pemfile debe contener tu certificado seguido de los certificados intermedios (constrúyelo con cat yourdomain.crt yourdomain.ca-bundle > yourdomain.fullchain.pem). El formato antiguo de un solo archivo que concatenaba el certificado y la clave privada en un único ssl.pemfile todavía funciona en compilaciones más antiguas, pero el formato de archivos separados coincide con la manera en que las Autoridades de Certificación entregan los archivos y es la recomendación documentada. Prueba la configuración con sudo lighttpd -t -f /etc/lighttpd/lighttpd.conf y reinicia lighttpd para aplicar el cambio. Para el flujo de trabajo completo, consulta nuestra guía sobre cómo instalar un certificado SSL en lighttpd.
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


