bg-tutorials

Как создать CSR на Qmail

Это руководство показывает, как сгенерировать 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

Детальное изображение дракона в полете
Написано

Опытный автор контента, специализирующийся на SSL-сертификатах. Превращает сложные темы кибербезопасности в понятный, увлекательный контент. Вносите свой вклад в повышение уровня цифровой безопасности с помощью впечатляющих рассказов.

Avatar of Sergiu Rosca
Technical Review by Sergiu Rosca

Sergiu Rosca is the core web developer behind SSL Dragon. He manages the technical infrastructure, platform performance, and backend integrations that keep the site running smoothly and securely. At SSL Dragon, Sergiu shares practical insights on web development, site optimization, and technical troubleshooting.

All SSL Dragon installation guides are tested on live server environments and undergo a strict peer-review process to ensure your infrastructure remains secure. Read our full Editorial Policy.