Это руководство показывает, как сгенерировать CSR (запрос на подпись сертификата) на qmail с помощью команды OpenSSL. Qmail (и его активно поддерживаемый форк, notqmail) не включает встроенный инструмент для создания CSR. Вы используете OpenSSL, чтобы создать два файла одновременно: приватный ключ, который остается на сервере, и CSR, который вы отправляете вашему Центру сертификации (CA).
CSR кодирует почтовое имя хоста, которое ваш сервер представляет во время STARTTLS, данные вашей организации и публичную часть ключа. Соответствующий приватный ключ никогда не покидает сервер. Если вы его потеряете, выданный сертификат станет непригодным для использования, и вам придется сгенерировать новую пару.
Примечание о qmail и notqmail: оригинальный qmail был «заморожен» Дэниелом Дж. Бернштейном в 1998 году и с тех пор не получал обновлений от разработчика. notqmail (последний релиз: 1.09, май 2024) — это поддерживаемый сообществом форк, который добавляет исправления безопасности, совместимость со сборкой на современных системах и продолжающуюся работу по переносимости. TLS не входит в его состав: как в notqmail, так и в оригинальном qmail, STARTTLS реализуется через внешний патч, и в примечаниях к релизу 1.09 указано, что существующий патч smtp-tls не применяется к этому релизу и что требуется новый патч от разработчиков. Проверьте статус патча для используемой вами версии перед заказом сертификата. Процесс генерации CSR идентичен для обоих вариантов, поскольку он использует OpenSSL, а не какой-либо бинарный файл qmail. Если вы всё ещё используете оригинальный qmail, рассмотрите переход на notqmail или Postfix для дальнейшей поддержки безопасности.
Предварительные требования
- Root-доступ или доступ через sudo к серверу, на котором работает qmail (или notqmail).
- Установленный OpenSSL. Он входит в базовую систему в каждом основном дистрибутиве Linux и BSD. Проверьте с помощью
openssl version. - Полное доменное имя почтового хоста, которое вы хотите указать в сертификате, например mail.example.com. Оно должно совпадать с MX-записью, к которой подключаются клиенты через STARTTLS, а не с «чистым» доменом.
Шаг 1: Подготовьте каталог для ключа и CSR
Qmail-smtpd считывает свой TLS-сертификат из /var/qmail/control/servercert.pem — этот путь жестко задан в патче TLS. Создайте подкаталог для ключевого материала и ограничьте к нему доступ только для root:
sudo mkdir -p /var/qmail/control/ssl
sudo chmod 700 /var/qmail/control/ssl
cd /var/qmail/control/ssl
Вы сгенерируете ключ и CSR внутри этого каталога. После того как CA выдаст сертификат, вы объедините файлы в servercert.pem, который qmail-smtpd считывает при запуске.
Шаг 2: Сгенерируйте приватный ключ и CSR
Выполните команду ниже. Она создает приватный ключ и CSR за один шаг и включает Subject Alternative Name (SAN), который требуют современные почтовые клиенты и CA. SAN должен указывать почтовое имя хоста (то, на которое указывает ваша 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"
Вот что делает каждая часть:
- req -new создает новый запрос на подпись сертификата.
- -newkey rsa:2048 генерирует новый 2048-битный приватный ключ RSA. 2048 бит — это текущий минимум для публичных сертификатов; вы можете использовать rsa:4096 для более длинного ключа.
- -nodes оставляет приватный ключ незашифрованным (без пароля), чтобы qmail-smtpd мог загрузить его при запуске без запроса.
- -keyout записывает приватный ключ. Держите этот файл в секрете и никогда никому не отправляйте, включая CA.
- -out записывает CSR, который вы отправляете в CA.
- -subj заполняет поля субъекта прямо в команде, так что она выполняется без интерактивных запросов. Укажите CN (Common Name) как ваше почтовое имя хоста.
- -addext «subjectAltName=…» добавляет запись SAN. CA выдают сертификаты на основе списка SAN, поэтому почтовое имя хоста должно присутствовать там.
Замените mail.example.com на реальное имя хоста, к которому подключаются клиенты (часто совпадает с MX-записью), и измените значения -subj в соответствии с вашей организацией. Двухбуквенный код страны (C) должен быть в верхнем регистре, например US или GB. Для сертификата с валидацией домена (DV) поля организации не проверяются, но команде все равно нужны корректные значения. Современный OpenSSL по умолчанию подписывает CSR с помощью SHA-256, что требуется каждым публичным CA.
Если вы предпочитаете заполнить поля интерактивно, а не через -subj, уберите этот флаг, и OpenSSL запросит у вас каждое значение:
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"
Когда появится запрос, оставьте поля challenge password и optional company name пустыми, нажав Enter. CA игнорируют эти поля, а challenge password вызывает проблемы позже.
Охват более одного имени хоста
Если один и тот же экземпляр qmail отвечает на более чем одно имя (например, и mail.example.com, и smtp.example.com), укажите каждое имя хоста в значении SAN, разделив их запятыми:
-addext "subjectAltName=DNS:mail.example.com,DNS:smtp.example.com"
Common Name должен по-прежнему быть основным почтовым именем хоста. Добавление «чистого» домена в SAN полезно только если почтовые клиенты когда-либо подключаются к нему напрямую; если ваша MX-запись указывает на поддомен, вам не нужно добавлять корневой домен в сертификат.
Предпочитаете ключ ECDSA?
Ключи ECDSA меньше и быстрее, чем RSA, при том же уровне безопасности, и поддерживаются всеми современными почтовыми клиентами и CA. Чтобы сгенерировать ключ и CSR P-256 (prime256v1), замените аргумент -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"
Обратите внимание, что оригинальный qmail с TLS-патчами от DJB может не поддерживать ECDSA. Если вы используете notqmail с современным OpenSSL, ECDSA работает без проблем.
Шаг 3: Защитите приватный ключ
Ограничьте доступ к приватному ключу так, чтобы его мог читать только root. Файл с необработанным ключом нужен только когда вы позже собираете объединенный servercert.pem, поэтому владение root и режим 600 являются правильными настройками:
sudo chown root:root /var/qmail/control/ssl/mail.example.com.key
sudo chmod 600 /var/qmail/control/ssl/mail.example.com.key
Файл CSR не является секретным (он содержит только публичный ключ и данные вашего субъекта), но хранение его в том же защищенном каталоге поддерживает порядок в структуре файлов.
Шаг 4: Проверьте CSR
Перед отправкой запроса убедитесь, что он содержит правильное имя хоста и SAN, и что его подпись действительна:
openssl req -noout -text -verify -in /var/qmail/control/ssl/mail.example.com.csr
Найдите в выводе verify OK, проверьте, что строка Subject показывает ваше почтовое имя хоста как Common Name, и убедитесь, что раздел X509v3 Subject Alternative Name содержит все ожидаемые имена хостов. Если SAN отсутствует, повторно сгенерируйте CSR с правильным значением -addext: CA не может добавить имена хостов после выдачи сертификата. Вы также можете вставить CSR в наш онлайн-инструмент CSR Decoder, чтобы проверить эти поля в браузере.
Шаг 5: Отправьте CSR
Откройте файл CSR и скопируйте всё его содержимое, включая строки BEGIN и END:
cat /var/qmail/control/ssl/mail.example.com.csr
Блок выглядит так. Скопируйте всё от первой строки до последней, включая пять дефисов с каждой стороны маркеров BEGIN и END:
-----BEGIN CERTIFICATE REQUEST-----
MIIC...base64-encoded data...AB
-----END CERTIFICATE REQUEST-----
Вставьте этот блок в форму заказа SSL. После того как CA проверит CSR и выдаст сертификат, следуйте нашему руководству по установке SSL для qmail, чтобы его развернуть. Держите файл .key на сервере: он необходим вместе с выданным сертификатом для включения STARTTLS, и его никогда нельзя отправлять в CA или кому-либо ещё.
Если вы не хотите использовать командную строку, создайте запрос с помощью нашего генератора CSR и вставьте результат в ваш заказ. Генератор возвращает соответствующий приватный ключ, который вы размещаете по тому же пути на сервере.
Куда деваются файлы в qmail
Для контекста: вот как файлы, которые вы только что сгенерировали, интегрируются в qmail после того, как CA возвращает сертификат и промежуточный сертификат (CA bundle). Qmail-smtpd считывает свой TLS-материал из единого объединенного PEM-файла по пути /var/qmail/control/servercert.pem. Этот файл должен содержать приватный ключ, сертификат сервера и промежуточные сертификаты, объединенные в этом порядке:
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
Группа nofiles — это группа по умолчанию для пользователя qmaild, от имени которого работает qmail-smtpd. Режим 640 позволяет qmaild читать файл благодаря членству в группе, при этом файл остается недоступным для других пользователей. Если в вашей системе используется другая группа для qmaild, замените имя группы в команде chown.
Qmail-smtpd предлагает STARTTLS только тогда, когда он собран с поддержкой TLS, которую ни оригинальный qmail, ни notqmail не поставляют самостоятельно. Обычный путь для обоих — патч qmail-tls от Frederik Vermeulen: именно он заставляет qmail-smtpd считывать servercert.pem и объявлять STARTTLS, как только этот файл появляется на месте. Другой путь — s/qmail от Erwin Hoffmann с ucspi-ssl, где sslserver экспортирует переменную окружения UCSPITLS в /service/qmail-smtpd/run, а ключ находится в отдельном файле serverkey.pem, поэтому описанная выше однофайловая структура там не применяется. После размещения объединенного PEM-файла перезапустите службу qmail-smtpd:
sudo svc -t /service/qmail-smtpd
Полное пошаговое руководство по установке, включая проверку цепочки сертификатов с помощью OpenSSL, находится в нашем руководстве по установке SSL для qmail.
Проверьте STARTTLS после установки
После установки сертификата убедитесь, что ваш сервер объявляет STARTTLS и предоставляет корректную цепочку сертификатов:
openssl s_client -connect mail.example.com:25 -starttls smtp -servername mail.example.com
Найдите Verify return code: 0 (ok) и убедитесь, что субъект и издатель совпадают с вашим сертификатом. Вы также можете просканировать сервер с помощью нашего SSL Checker для получения наглядного отчета о цепочке сертификатов и сроке действия.
Генерация CSR на других почтовых платформах
Используете другой почтовый сервер? См. наши другие руководства по CSR:
Сэкономьте 10% на SSL-сертификатах при заказе сегодня!
Быстрая выдача, надежное шифрование, 99,99% доверия к браузеру, специализированная поддержка и 25-дневная гарантия возврата денег. Код купона: SAVE10


