bg-tutorials

Как установить SSL-сертификат на Qmail

Это руководство показывает вам как установить SSL/TLS сертификат на Qmail, агент передачи почты, изначально написанный D. J. Bernstein. Процесс тот же, что Qmail использует уже много лет: собрать единый PEM-файл, содержащий приватный ключ, сертификат сервера и промежуточную цепочку, разместить его в /var/qmail/control/servercert.pem и перезапустить Qmail.

Прежде чем начать: Qmail — устаревший MTA

Сам Qmail не обновлялся с момента выхода оригинальной версии qmail-1.03 в 1998 году. D. J. Bernstein перевёл код в общественное достояние в 2007 году, но разработку не возобновил. Известный форк сообщества netqmail получил свой финальный релиз 1.06 в 2007 году и не поддерживался более десяти лет. Активным современным преемником является notqmail (текущий релиз 1.09, май 2024 года), который продолжает вносить исправления ошибок и обеспечивать совместимость с современными системами, оставаясь полностью совместимым с оригиналом.

Не менее важно для этого руководства: стандартный qmail не имеет встроенной поддержки SSL/TLS. TLS добавляется одним из двух сторонних способов:

  • Патч qmail-tls от Frederik Vermeulen, который добавляет STARTTLS в qmail-smtpd и считывает сертификат из жёстко заданного пути: /var/qmail/control/servercert.pem. Большинство современных пакетов qmail (включая сборки netqmail и notqmail, дистрибутив s/qmail и многие пакеты от поставщиков) поставляются с этим патчем или его аналогом.
  • stunnel перед qmail-smtpd, который оборачивает соединение в TLS на порту 465 (SMTPS). Это работает с любой сборкой qmail, поскольку завершение TLS происходит вне Qmail.

Если вы поддерживаете существующее развёртывание qmail, приведённые ниже шаги по-прежнему применимы. Если вы создаёте новый почтовый сервер с нуля, рассмотрите вместо этого Postfix или OpenSMTPD: оба имеют встроенную, хорошо поддерживаемую поддержку TLS и активные команды безопасности. У нас есть отдельное руководство о том, как установить SSL сертификат на Postfix.

Сгенерировать код CSR для Qmail

Если вы уже сгенерировали свой CSR и получили SSL-файлы от вашего CA, переходите сразу к разделу Установка SSL сертификата на Qmail.

CSR расшифровывается как Certificate Signing Request: блок закодированного текста, содержащий данные вашего домена и организации. Вы отправляете его в удостоверяющий центр (CA), чтобы тот мог проверить ваш запрос и выпустить сертификат. Генерация CSR также создаёт соответствующий приватный ключ, который остаётся на вашем сервере и требуется для установки. У вас есть два варианта:

Откройте файл CSR в любом текстовом редакторе и скопируйте весь блок, включая строки BEGIN CERTIFICATE REQUEST и END CERTIFICATE REQUEST, в поле CSR формы заказа. Сохраните файл приватного ключа в надёжном месте: вы объедините его в PEM-файл в следующем разделе.

Установка SSL сертификата на Qmail

После проверки CA отправит вам по электронной почте ZIP-архив с вашими SSL-файлами: основным (серверным) сертификатом и одним или несколькими промежуточными (CA) сертификатами. Извлеките архив на своём сервере, затем следуйте приведённым ниже шагам.

Шаг 1: Объедините ключ, сертификат и цепочку в один PEM-файл

Патч qmail-tls (и его аналоги в netqmail, notqmail и s/qmail) считывает всё необходимое для завершения TLS из одного PEM-файла. Объедините файлы в следующем порядке: сначала ваш приватный ключ, затем сертификат сервера, затем промежуточную (CA) цепочку. Корневой сертификат не требуется (клиенты уже доверяют ему). Из каталога, содержащего извлечённые файлы, выполните:

cat yourdomain.key yourdomain.crt yourdomain.ca-bundle > servercert.pem

Если ваш CA предоставил промежуточные сертификаты в виде отдельных файлов, а не одного файла .ca-bundle, перечислите каждый из них после сертификата сервера, начиная с листового и заканчивая промежуточным, выпущенным корневым CA:

cat yourdomain.key yourdomain.crt intermediate1.crt intermediate2.crt > servercert.pem

Откройте получившийся файл в текстовом редакторе, чтобы убедиться в правильности структуры. Он должен выглядеть так, с реальными маркерами из пяти дефисов вокруг каждого блока:

-----BEGIN RSA PRIVATE KEY-----
(the text of your private key)
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
(the text of your primary SSL certificate)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(the text of the intermediate CA certificate)
-----END CERTIFICATE-----

Более новые ключи могут быть помечены как BEGIN PRIVATE KEY вместо BEGIN RSA PRIVATE KEY; и то, и другое подходит. Ключ не должен быть зашифрован парольной фразой, потому что qmail-smtpd загружает его при запуске без запроса пароля. Если ваш CA выпустил сертификат ECDSA, блок ключа будет обозначен как BEGIN EC PRIVATE KEY; в остальном ничего не меняется.

Шаг 2: Переместите файл в каталог управления Qmail

Имя файла и путь заданы жёстко патчем qmail-tls. Переместите объединённый PEM-файл в каталог управления Qmail и ужесточите его права доступа, так как он содержит ваш приватный ключ:

sudo mv servercert.pem /var/qmail/control/servercert.pem
sudo chmod 600 /var/qmail/control/servercert.pem
sudo chown root:qmail /var/qmail/control/servercert.pem

Владелец и группа зависят от того, под каким пользователем в вашей системе работает qmail-smtpd. В стандартной установке netqmail или notqmail это обычно qmaild или группа qmail, поэтому подойдёт root:qmail с режимом 600. В настройке на основе vpopmail qmail-smtpd работает от имени vpopmail, поэтому используйте:

sudo chown vpopmail:vchkpw /var/qmail/control/servercert.pem
sudo chmod 640 /var/qmail/control/servercert.pem

В любом случае цель одна и та же: процесс qmail-smtpd должен иметь возможность читать файл, и ничто другое не должно.

Шаг 3: Настройка для нестандартных сборок

Большинство разновидностей qmail ищут файл в стандартном расположении, но некоторые используют вместо этого переменные окружения. Определите свою сборку:

  • Стандартный qmail с патчем qmail-tls (netqmail / notqmail / пакеты от поставщиков): дополнительная настройка не требуется. qmail-smtpd автоматически считывает /var/qmail/control/servercert.pem. Чтобы qmail-smtpd анонсировал STARTTLS в ответе EHLO, переменная окружения UCSPITLS должна быть установлена в скрипте запуска qmail-smtpd (обычно /var/qmail/supervise/qmail-smtpd/run): экспортируйте UCSPITLS=»» перед строкой запуска qmail-smtpd. Чтобы требовать шифрование до аутентификации, также установите FORCE_TLS=1.
  • s/qmail с ucspi-ssl: путь к сертификату не задан жёстко. Установите эти переменные окружения в скрипте запуска qmail-smtpd (или в соответствующей обёртке tcpserver / sslserver): CERTFILE для сертификата сервера, KEYFILE для приватного ключа (они могут указывать на один и тот же объединённый PEM-файл) и CERTCHAINFILE для промежуточных сертификатов. Точные названия директив для вашей версии смотрите в документации s/qmail.
  • Фронтенд stunnel (SMTPS на порту 465): укажите в директиве cert stunnel путь /var/qmail/control/servercert.pem и настройте её директиву exec на запуск qmail-smtpd. Этот способ вообще не требует патча qmail-tls; TLS завершается на stunnel.

Если вы не знаете, с каким патчем был собран ваш qmail-smtpd, проверьте бинарный файл:

strings /var/qmail/bin/qmail-smtpd | grep -iE 'tls|starttls|servercert'

Если вы видите упоминания STARTTLS, servercert.pem или UCSPITLS, значит, бинарный файл скомпилирован с патчем qmail-tls.

Шаг 4: Перезапустите Qmail

Qmail считывает сертификат при запуске процесса, поэтому требуется перезапуск qmail-smtpd. В большинстве установок, использующих предоставленные управляющие скрипты:

sudo qmailctl restart

Если ваш дистрибутив оборачивает Qmail в сервис systemd, используйте:

sudo systemctl restart qmail

В настройке daemontools / runit вместо этого отправьте qmail-smtpd сигнал TERM через svc:

sudo svc -t /service/qmail-smtpd

Следите за журналом (обычно /var/log/qmail/smtpd/current) на предмет ошибок при запуске. Неправильно отформатированный PEM-файл или неверные права владения — наиболее частая причина, по которой qmail-smtpd отказывается включать TLS.

Проверьте установку SSL

Убедитесь с помощью OpenSSL, что Qmail предлагает STARTTLS и предоставляет правильный сертификат. Замените mail.yourdomain.com на имя хоста вашего почтового сервера:

openssl s_client -starttls smtp -connect mail.yourdomain.com:25 -servername mail.yourdomain.com </dev/null 
| openssl x509 -noout -issuer -subject -dates

В выводе должны отобразиться субъект (общее имя), издатель (CA) и сроки действия вашего сертификата. Если вместо этого вы настроили SMTPS через stunnel на порту 465, уберите -starttls smtp и подключайтесь напрямую к порту 465:

openssl s_client -connect mail.yourdomain.com:465 -servername mail.yourdomain.com

Найдите строку Verify return code: 0 (ok) в конце процесса рукопожатия. Если вы видите ошибку цепочки, значит, промежуточные сертификаты отсутствуют в servercert.pem: добавьте их и перезапустите qmail-smtpd. Для получения полного отчёта о сертификате, цепочке и поддержке протоколов запустите наш SSL Checker для имени хоста вашего почтового сервера.

Часто задаваемые вопросы

Откуда Qmail считывает SSL сертификат?

Из файла /var/qmail/control/servercert.pem. Этот путь жёстко задан в патче qmail-tls, который добавляет STARTTLS в qmail-smtpd, и тот же путь используется во всех распространённых разновидностях qmail (netqmail, notqmail, пакеты от поставщиков). Файл должен содержать приватный ключ, сертификат сервера и промежуточную цепочку именно в таком порядке. Исключение составляет s/qmail с ucspi-ssl: он вместо этого считывает переменные окружения CERTFILE, KEYFILE и CERTCHAINFILE.

В каком порядке размещать файлы в servercert.pem?

Сначала приватный ключ, затем серверный (листовой) сертификат, затем промежуточный сертификат(ы) CA. Корневой сертификат не требуется, так как почтовые клиенты уже доверяют ему. Достаточно одной команды:
cat yourdomain.key yourdomain.crt yourdomain.ca-bundle > servercert.pem
Если порядок неверен, qmail-smtpd не сможет загрузить сертификат при запуске, и TLS не будет предложен. Если вы подозреваете это, проверьте журнал в /var/log/qmail/smtpd/.

Поддерживает ли стандартный qmail TLS?

Сам по себе — нет. Оригинальный релиз qmail-1.03 от 1998 года не имеет поддержки SSL или TLS. TLS добавляется либо патчем qmail-tls (скомпилированным в бинарный файл qmail-smtpd, добавляет STARTTLS на портах 25 и 587), либо запуском stunnel перед qmail-smtpd для SMTPS на порту 465. Почти каждый современный пакет qmail поставляется с уже применённым патчем qmail-tls, поэтому обычно не нужно патчить исходный код самостоятельно.

Поддерживается ли Qmail до сих пор?

Оригинальный Qmail (qmail-1.03) не обновлялся с 1998 года. Первый форк сообщества, netqmail, выпустил свой последний релиз (1.06) в 2007 году. Активным современным преемником является notqmail, который выпустил версию 1.09 в мае 2024 года и продолжает поставлять исправления ошибок и патчи совместимости с современными системами. Для новых почтовых серверов большинство операторов вместо этого выбирают Postfix или OpenSMTPD, оба из которых имеют встроенную и активно поддерживаемую поддержку TLS.

Почему qmail-smtpd запускается, но не предлагает STARTTLS?

Три распространённые причины. Во-первых, переменная окружения UCSPITLS не экспортируется в скрипте запуска qmail-smtpd: установите UCSPITLS=»» (значение может быть пустым) перед строкой запуска qmail-smtpd и перезапустите службу. Во-вторых, бинарный файл qmail-smtpd был собран без патча qmail-tls: проверьте это с помощью strings /var/qmail/bin/qmail-smtpd | grep -i tls. В-третьих, файл /var/qmail/control/servercert.pem отсутствует, недоступен для чтения пользователю qmail-smtpd или повреждён; проверьте права доступа и порядок PEM-блоков.

Как проверить сертификат после перезапуска Qmail?

Подключитесь к SMTP-порту с помощью OpenSSL и прочитайте сертификат, который Qmail предоставляет через STARTTLS:
openssl s_client -starttls smtp -connect mail.yourdomain.com:25 -servername mail.yourdomain.com </dev/null | openssl x509 -noout -issuer -subject -dates
Это выведет субъект, издателя и сроки действия. Для SMTPS через stunnel на порту 465 уберите флаг -starttls smtp. Убедитесь, что издатель соответствует вашему CA, и что рукопожатие заканчивается сообщением Verify return code: 0 (ok).

Сэкономьте 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.