Esta guía muestra cómo generar un CSR (Certificate Signing Request) en qmail usando la línea de comandos de OpenSSL. Qmail (y su fork mantenido activamente, notqmail) no incluye una herramienta integrada para CSR. Se utiliza OpenSSL para crear dos archivos a la vez: una clave privada que permanece en el servidor y el CSR que se envía a la Autoridad Certificadora (CA).
El CSR codifica el nombre de host de correo que el servidor presenta durante STARTTLS, los datos de su organización y la mitad pública de la clave. La clave privada correspondiente nunca sale del servidor. Si la pierde, el certificado emitido queda inutilizable y debe generar un nuevo par.
Una nota sobre qmail frente a notqmail: el qmail original fue congelado por Daniel J. Bernstein en 1998 y no ha recibido actualizaciones oficiales desde entonces. notqmail (última versión: 1.09, mayo de 2024) es el fork mantenido por la comunidad que añade correcciones de seguridad, compatibilidad de compilación actual y trabajo continuo de portabilidad. TLS no forma parte de él: en notqmail, igual que en el qmail original, STARTTLS proviene de un parche externo, y las notas de la versión 1.09 registran que el parche smtp-tls existente no se aplica a esa versión y que se necesita un nuevo parche oficial. Compruebe el estado del parche para la versión que ejecuta antes de solicitar un certificado. El proceso de generación del CSR es idéntico para ambos, porque utiliza OpenSSL en lugar de cualquier binario de qmail. Si todavía ejecuta el qmail original, considere migrar a notqmail o Postfix para contar con soporte de seguridad continuo.
Requisitos previos
- Acceso root o sudo al servidor que ejecuta qmail (o notqmail).
- OpenSSL instalado. Viene incluido en el sistema base de todas las distribuciones Linux y BSD principales. Compruébelo con
openssl version. - El nombre de host de correo completamente calificado que desea en el certificado, por ejemplo mail.example.com. Debe coincidir con el registro MX al que se conectan los clientes mediante STARTTLS, no con el dominio raíz simple.
Paso 1: Prepare un directorio para la clave y el CSR
Qmail-smtpd lee su certificado TLS desde /var/qmail/control/servercert.pem, la ruta que el parche TLS deja fija en el código. Cree un subdirectorio para el material de la clave y restrínjalo solo al usuario root:
sudo mkdir -p /var/qmail/control/ssl
sudo chmod 700 /var/qmail/control/ssl
cd /var/qmail/control/ssl
Generará la clave y el CSR dentro de este directorio. Después de que la CA emita el certificado, combinará los archivos en el servercert.pem que qmail-smtpd lee al iniciarse.
Paso 2: Genere la clave privada y el CSR
Ejecute el siguiente comando. Crea la clave privada y el CSR en un solo paso e incluye el Subject Alternative Name (SAN) que requieren los clientes de correo y las CA modernas. El SAN debe incluir el nombre de host de correo (aquel al que apunta su registro MX):
sudo openssl req -new -newkey rsa:2048 -nodes
-keyout /var/qmail/control/ssl/mail.example.com.key
-out /var/qmail/control/ssl/mail.example.com.csr
-subj "/C=US/ST=YourState/L=YourCity/O=YourCompany/CN=mail.example.com"
-addext "subjectAltName=DNS:mail.example.com"
Esto es lo que hace cada parte:
- req -new crea una nueva solicitud de firma de certificado.
- -newkey rsa:2048 genera una nueva clave privada 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.
- -nodes deja la clave privada sin cifrar (sin frase de contraseña), para que qmail-smtpd pueda cargarla al iniciarse sin pedir datos.
- -keyout escribe la clave privada. Mantenga este archivo en privado y nunca lo envíe a nadie, incluida la CA.
- -out escribe el CSR que envía a la CA.
- -subj completa los campos del sujeto en línea para que el comando se ejecute sin solicitudes interactivas. Establezca CN (Common Name) con su nombre de host de correo.
- -addext «subjectAltName=…» añade la entrada SAN. Las CA emiten en función de la lista SAN, por lo que el nombre de host de correo debe aparecer aquí.
Sustituya mail.example.com por el nombre de host real al que se conectan los clientes (a menudo el mismo nombre que su registro MX), y edite los valores de -subj para que coincidan con su organización. El código de país de dos letras (C) debe ir en mayúsculas, por ejemplo US o GB. Para un certificado validado a nivel de dominio (DV), los campos de organización no se verifican, pero el comando aun así necesita valores válidos. OpenSSL moderno firma el CSR con SHA-256 de forma predeterminada, que es lo que exige toda CA pública.
Si prefiere completar los campos de forma interactiva en lugar de usar -subj, omita ese indicador y OpenSSL le pedirá cada valor:
sudo openssl req -new -newkey rsa:2048 -nodes
-keyout /var/qmail/control/ssl/mail.example.com.key
-out /var/qmail/control/ssl/mail.example.com.csr
-addext "subjectAltName=DNS:mail.example.com"
Cuando se le solicite, deje en blanco la challenge password y el optional company name pulsando Enter. Las CA ignoran esos campos, y una contraseña de desafío causa problemas más adelante.
Cubrir más de un nombre de host
Si la misma instancia de qmail responde con más de un nombre (por ejemplo, tanto mail.example.com como smtp.example.com), incluya cada nombre de host en el valor SAN, separados por comas:
-addext "subjectAltName=DNS:mail.example.com,DNS:smtp.example.com"
El Common Name debe seguir siendo el nombre de host de correo principal. Añadir el dominio raíz simple al SAN solo es útil si los clientes de correo se conectan a él directamente; si su registro MX apunta a un subdominio, no necesita el dominio raíz en el certificado.
¿Prefiere una clave ECDSA?
Las claves ECDSA son más pequeñas y rápidas que RSA con el mismo nivel de seguridad, y son compatibles con todos los clientes de correo y CA actuales. Para generar una clave y CSR P-256 (prime256v1), cambie el argumento -newkey:
sudo openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 -pkeyopt ec_param_enc:named_curve -nodes
-keyout /var/qmail/control/ssl/mail.example.com.key
-out /var/qmail/control/ssl/mail.example.com.csr
-subj "/C=US/ST=YourState/L=YourCity/O=YourCompany/CN=mail.example.com"
-addext "subjectAltName=DNS:mail.example.com"
Tenga en cuenta que el qmail original con los parches TLS de DJB puede no admitir ECDSA. Si ejecuta notqmail con un OpenSSL actual, ECDSA funciona sin problemas.
Paso 3: Proteja la clave privada
Restrinja la clave privada de modo que solo root pueda leerla. El archivo de clave sin procesar solo se necesita cuando construya más adelante el servercert.pem combinado, así que la propiedad de root y el modo 600 son correctos:
sudo chown root:root /var/qmail/control/ssl/mail.example.com.key
sudo chmod 600 /var/qmail/control/ssl/mail.example.com.key
El archivo CSR no es secreto (solo contiene la clave pública y los datos de su sujeto), pero mantenerlo en el mismo directorio restringido conserva el orden.
Paso 4: Verifique el CSR
Antes de enviar la solicitud, confirme que contiene el nombre de host y el SAN correctos y que su firma es válida:
openssl req -noout -text -verify -in /var/qmail/control/ssl/mail.example.com.csr
Busque verify OK en la salida, compruebe que la línea Subject muestre su nombre de host de correo como Common Name, y confirme que la sección X509v3 Subject Alternative Name incluya cada nombre de host esperado. Si falta un SAN, vuelva a generar el CSR con el valor correcto de -addext: una CA no puede añadir nombres de host después de la emisión. También puede pegar el CSR en nuestro CSR Decoder en línea para comprobar estos campos en el navegador.
Paso 5: Envíe el CSR
Abra el archivo CSR y copie todo su contenido, incluidas las líneas BEGIN y END:
cat /var/qmail/control/ssl/mail.example.com.csr
El bloque tiene este aspecto. Copie todo desde la primera línea hasta la última, incluidos los cinco guiones a cada lado de los marcadores BEGIN y END:
-----BEGIN CERTIFICATE REQUEST-----
MIIC...base64-encoded data...AB
-----END CERTIFICATE REQUEST-----
Pegue ese bloque en su formulario de pedido de SSL. Después de que la CA valide el CSR y emita el certificado, siga nuestra guía de instalación de SSL en qmail para implementarlo. Conserve el archivo .key en el servidor: lo necesita junto con el certificado emitido para habilitar STARTTLS, y nunca debe enviarlo a la CA ni a nadie más.
Si prefiere no usar la línea de comandos, construya la solicitud con nuestro CSR Generator y pegue el resultado en su pedido. El generador devuelve una clave privada correspondiente que coloca en la misma ruta en el servidor.
Dónde van los archivos en qmail
Como contexto, así es cómo los archivos que acaba de generar se integran en qmail una vez que la CA devuelve el certificado y el intermedio (paquete de CA). Qmail-smtpd lee su material TLS desde un único archivo PEM combinado en /var/qmail/control/servercert.pem. Este archivo debe contener la clave privada, el certificado del servidor y los certificados intermedios, concatenados en ese orden:
cat mail.example.com.key mail.example.com.crt intermediate.pem
> /var/qmail/control/servercert.pem
sudo chown root:nofiles /var/qmail/control/servercert.pem
sudo chmod 640 /var/qmail/control/servercert.pem
El grupo nofiles es el grupo predeterminado para el usuario qmaild con el que se ejecuta qmail-smtpd. El modo 640 permite que qmaild lea el archivo mediante la pertenencia al grupo, a la vez que lo mantiene ilegible para otros usuarios. Si su sistema utiliza un grupo diferente para qmaild, sustituya ese nombre de grupo en el comando chown.
Qmail-smtpd solo ofrece STARTTLS cuando se ha compilado con soporte TLS, algo que ni el qmail original ni notqmail incluyen por sí solos. La vía habitual en ambos es el parche qmail-tls de Frederik Vermeulen: es lo que hace que qmail-smtpd lea servercert.pem y anuncie STARTTLS en cuanto ese archivo está en su lugar. La otra vía es s/qmail de Erwin Hoffmann con ucspi-ssl, donde sslserver exporta la variable de entorno UCSPITLS en /service/qmail-smtpd/run y la clave se encuentra en un archivo serverkey.pem separado, por lo que el esquema de archivo único descrito arriba no aplica en ese caso. Después de colocar el archivo PEM combinado, reinicie el servicio qmail-smtpd:
sudo svc -t /service/qmail-smtpd
La guía completa de instalación, incluida la verificación de la cadena de certificados con OpenSSL, está en nuestra guía de instalación de SSL en qmail.
Verifique STARTTLS después de la instalación
Una vez instalado el certificado, confirme que su servidor anuncia STARTTLS y ofrece una cadena válida:
openssl s_client -connect mail.example.com:25 -starttls smtp -servername mail.example.com
Busque Verify return code: 0 (ok) y confirme que el sujeto y el emisor coinciden con su certificado. También puede escanear el servidor con nuestro SSL Checker para obtener un informe visual de la cadena de certificados y la fecha de vencimiento.
Genere un CSR en otras plataformas de correo
¿Utiliza un servidor de correo diferente? Consulte nuestras otras guías de CSR:
- Courier IMAP Server
- Kerio Connect
- Postfix
- Proxmox
- SurgeMail
- Zimbra
- Todos los tutoriales de generación de 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


