bg-tutorials

Как установить SSL-сертификат ACME на почтовые серверы

В этом руководстве Вы узнаете, как установить SSL-сертификат ACME на почтовые серверы, а именно Postfix, Dovecot и, как вариант, Exim, используя коммерческих провайдеров, поддерживающих ACME + EAB. Мы будем использовать команду acme.sh для регистрации Вашего аккаунта ACME, выпуска сертификата для имени Вашего почтового хоста, а затем подключим этот сертификат непосредственно к конфигурации TLS Вашего почтового сервера.

Почтовые серверы ACME SSL

Это руководство предполагает наличие почтового сервера на базе Linux и коммерческого ЦС, который предоставляет URL каталога ACME вместе с учетными данными EAB (Key ID + HMAC). Поскольку почтовые среды различаются в разных дистрибутивах и хостингах, рассматривайте это руководство как четкий и надежный образец, но всегда проверяйте пути, имена служб и настройки TLS на своем сервере по ходу работы.


Прежде чем начать

Вы проведете время гораздо спокойнее, если эти основы будут готовы:

  • Имя почтового хоста, например, mail.example.com, с записью A/AAAA, указывающей на Ваш почтовый сервер.
  • Ваша запись MX, указывающая на это имя хоста (обычная настройка)
  • Shell/SSH-доступ к почтовому серверу с правами sudo или root
  • Коммерческая учетная запись CA, предоставляющая URL-адрес каталога ACME(например, https://acme.yourca.com/v2/acme), идентификатор ключа EAB и ключ EAB HMAC.
  • Почтовый стек: Postfix/Exim для SMTP и Dovecot для IMAP/POP3

Мы будем использовать проверку DNS-01, поскольку она работает, даже если на Вашем почтовом сервере нет публичного сайта, и часто предпочтительна в производстве.


Шаг 1: Установите файл acme.sh на почтовый сервер

Вы установите клиент ACME непосредственно на почтовый сервер, чтобы он мог обновлять сертификаты и записывать их на диск, где Postfix/Dovecot/Exim сможет их прочитать.

На почтовом сервере:

curl https://get.acme.sh | sh
source ~/.bashrc
acme.sh --version

Если Вы видите номер версии, значит, клиент установлен и готов к работе. Если строка source ~/.bashrc не работает, выйдите из системы и снова войдите в нее, а затем снова запустите acme.sh --version.


Шаг 2: Зарегистрируйте свою учетную запись ACME (с EAB)

Затем Вам необходимо зарегистрировать учетную запись ACME в Вашем коммерческом ЦС, используя учетные данные EAB из его панели. acme.sh поддерживает EAB через --eab-kid и --eab-hmac-key.

Запустите это на почтовом сервере:

acme.sh --register-account \
  --server https://acme.yourca.com/v2/acme \
  --eab-kid YOUR_EAB_KID \
  --eab-hmac-key YOUR_EAB_HMAC_KEY \
  --accountemail [email protected]

Замените:

  • https://acme.yourca.com/v2/acme с URL-адресом каталога ACME Вашего ЦС
  • YOUR_EAB_KID с идентификатором ключа
  • YOUR_EAB_HMAC_KEY с ключом HMAC
  • [email protected] с Вашим настоящим электронным адресом администратора для уведомлений об истечении срока действия

Вы делаете это один раз для каждой учетной записи. Если команда не срабатывает, это почти всегда опечатка в значениях URL или EAB.


Шаг 3: Выдача сертификата через DNS-01

Теперь Вы запрашиваете сертификат для имени хоста, к которому будут подключаться Ваши пользователи, например, mail.example.com (или imap.example.com, smtp.example.com. Просто выберите тот, который Вы действительно используете в конфигурации клиента).

Выдайте сертификат (ручной DNS)

Бег:

acme.sh --issue \
  -d mail.example.com \
  --dns dns_manual \
  --server https://acme.yourca.com/v2/acme

--dns dns_manual Рассказывает acme.sh Вы будете добавлять TXT-записи вручную в своей DNS-панели.

Клиент выдаст что-то вроде:

Please add a TXT record:
_acme-challenge.mail.example.com → some-long-token-value

Добавьте запись TXT

В панели Вашего DNS-провайдера создайте TXT-запись:

  • Имя: _acme-challenge.mail.example.com
  • Значение: маркер, показанный acme.sh

Подождите несколько минут, пока DNS распространится, затем проверьте его:

dig TXT _acme-challenge.mail.example.com +short

Если Вы видите там маркер, выполните команду acme.sh --issue еще раз, чтобы завершить проверку. Если проверка прошла успешно, acme.sh сохранит Ваши файлы в каталоге ~/.acme.sh/mail.example.com/.

Внутри этой директории у Вас будет как минимум:

  • fullchain.cer — сертификат плюс промежуточная цепочка
  • mail.example.com.key — закрытый ключ
  • ca.cer — сертификаты CA (если Ваш CA предоставляет их отдельно).

Мы будем использовать их в следующих шагах.


Шаг 4: Настройте Postfix на использование сертификата ACME (SMTP)

Postfix должен знать, где находятся Ваш новый сертификат и ключ. TLS в Postfix управляется такими опциями, как smtpd_tls_cert_file и smtpd_tls_key_file.

Сначала скопируйте файлы в стабильное место, например:

sudo mkdir -p /etc/ssl/mail
sudo cp ~/.acme.sh/mail.example.com/fullchain.cer /etc/ssl/mail/mail-fullchain.cer
sudo cp ~/.acme.sh/mail.example.com/mail.example.com.key /etc/ssl/mail/mail.key
sudo chown root:root /etc/ssl/mail/*
sudo chmod 600 /etc/ssl/mail/mail.key

Затем скажите Postfix использовать их:

sudo postconf -e 'smtpd_use_tls = yes'
sudo postconf -e 'smtpd_tls_security_level = may'
sudo postconf -e 'smtpd_tls_cert_file = /etc/ssl/mail/mail-fullchain.cer'
sudo postconf -e 'smtpd_tls_key_file = /etc/ssl/mail/mail.key'
sudo postconf -e 'smtp_tls_security_level = may'
  • smtpd_* Настройки управления входящей почтой (клиенты, отправляющие Вам почту)
  • smtp_* Настройки управления исходящей почтой (Ваш сервер отправляет почту другим)

Примените изменения:

sudo systemctl restart postfix

Если в Вашем дистрибутиве все еще используется service, настройте команду соответствующим образом.


Шаг 5: Настройте Dovecot на использование сертификата ACME (IMAP/POP3)

Dovecot работает с IMAP и POP3. Вы настраиваете TLS, указывая ssl_cert и ssl_key на те же файлы, которые мы только что подготовили.

Откройте конфигурацию SSL Dovecot:

sudo nano /etc/dovecot/conf.d/10-ssl.conf

Обновите (или добавьте) эти строки:

ssl = yes
ssl_cert = </etc/ssl/mail/mail-fullchain.cer
ssl_key  = </etc/ssl/mail/mail.key

Сохраните файл и перезагрузите Dovecot:

sudo systemctl restart dovecot

Теперь IMAP/POP3 по TLS будет представлять тот же самый коммерческий сертификат ACME.


Необязательно: Используйте тот же сертификат в Exim

Если Вы используете Exim в качестве почтового сервера вместо Postfix, интеграция будет аналогичной. Exim использует опции tls_certificate и tls_privatekey для TLS.

В Вашей конфигурации Exim (путь зависит от дистрибутива, часто это /etc/exim4/exim4.conf.template или split config под /etc/exim4/conf.d/) установите:

tls_certificate = /etc/ssl/mail/mail-fullchain.cer
tls_privatekey  = /etc/ssl/mail/mail.key

Затем перезагрузите Exim:

sudo systemctl restart exim4

Проверьте документацию Вашего дистрибутива, если название службы немного отличается.


Шаг 6: Проверьте TLS Вашей почты

Вы можете проводить тестирование с любой другой машины, на которой установлен OpenSSL .

Протестируйте SMTP (Postfix или Exim)

openssl s_client -starttls smtp -connect mail.example.com:587 -showcerts

Тест IMAP (Dovecot)

openssl s_client -starttls imap -connect mail.example.com:143 -showcerts

Если в результатах отображается Ваш коммерческий ЦС и имя хоста совпадает, то все в порядке.


Шаг 7: Поддерживайте автоматическое обновление и перезагрузку

acme.sh уже установлено задание cron, которое ежедневно проверяет наличие обновлений. Когда срок действия Вашего сертификата подойдет к концу, он обновится автоматически и обновит файлы в ~/.acme.sh/mail.example.com/.

Чтобы заставить Postfix/Dovecot/Exim всегда использовать последнюю версию, у Вас есть два варианта:

  1. Укажите конфигурации непосредственно на файлы в ~/.acme.sh/mail.example.com/
    (например, smtpd_tls_cert_file = /root/.acme.sh/mail.example.com/fullchain.cer) и убедитесь, что только root может их прочитать.
  2. Напишите небольшой сценарий развертывания, который копирует обновленные файлы в /etc/ssl/mail/ и перезапускает или перезагружает сервер.

Пример сценария:

#!/usr/bin/env bash
DOMAIN="mail.example.com"
SRC="$HOME/.acme.sh/$DOMAIN"
DEST="/etc/ssl/mail"

sudo cp "$SRC/fullchain.cer" "$DEST/mail-fullchain.cer"
sudo cp "$SRC/$DOMAIN.key"   "$DEST/mail.key"
sudo chown root:root "$DEST/"*
sudo chmod 600 "$DEST/mail.key"

sudo systemctl restart postfix dovecot

Этот скрипт копирует только что выпущенный сертификат ACME и закрытый ключ в каталог почтового SSL Вашего сервера, устанавливает правильные права собственности и разрешения, а затем перезапускает Postfix и Dovecot, чтобы они сразу же начали использовать обновленный сертификат. Используйте свои учетные данные вместо заполнителей.

Затем подключите его к acme.sh:

acme.sh --install-cert -d mail.example.com \
  --key-file       ~/.acme.sh/mail.example.com/mail.example.com.key \
  --fullchain-file ~/.acme.sh/mail.example.com/fullchain.cer \
  --reloadcmd "/path/to/your/deploy-script.sh"

С этого момента продление происходит автоматически.


Общие вопросы и устранение неполадок

Когда Вы делаете это в первый раз, могут возникнуть некоторые проблемы. Вот как быстро с ними справиться.

Почему при проверке ACME выдается сообщение «unauthorized» или «invalid response»?

Это происходит, когда ЦС не может проверить TXT-запись Вашего DNS. Проверьте это:

  • Запись в формате TXT выглядит следующим образом _acme-challenge.mail.example.com
  • В маркере нет лишних кавычек или пробелов
  • DNS распространился (dig TXT _acme-challenge.mail.example.com +short)
  • Вы не перепутали mail.example.com с example.com

Если Вы не уверены, удалите запись TXT, запустите заново acme.sh --issue, и снова добавьте точное значение, которое дает Вам ACME.

Почему я получаю ошибки «accountDoesNotExist» или ошибки, связанные с EAB?

Они появляются, когда регистрация Вашей учетной записи ACME не совпадает с учетными данными EAB из Вашего центра сертификации.

Исправить по:

  • Повторная проверка URL-адреса каталога ACME (производственный и промежуточный)
  • Убедитесь, что идентификатор ключа и HMAC скопированы точно, без скрытых пробелов
  • Повторное выполнение команды регистрации один раз с правильными значениями

Коммерческие центры сертификации отклоняют любую регистрацию EAB, которая не соответствует их профилю.

Почему SMTP/IMAP все еще показывает старый сертификат?

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

  • Пути TLS в Postfix/Dovecot/Exim соответствуют реальным файлам
  • Вы перезапустили правильную службу (systemctl restart postfix dovecot exim4).
  • Ни один второй экземпляр, контейнер или прокси не обслуживает старый сертификат.

Вы можете проверить живой сертификат, используя:

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

Заключительные слова

При такой настройке Ваш почтовый сервер представляет клиентам SMTP и IMAP/POP3 надлежащий коммерческий сертификат ACME, а файл acme.sh спокойно занимается обновлением в фоновом режиме. Вы сохраняете полный контроль над цепочкой сертификатов и именами файлов, Ваши пользователи перестают видеть предупреждения о безопасности, и Вам не нужно заходить в систему каждые несколько месяцев, чтобы вручную загружать новые файлы.

Сделав это один раз, Вы можете повторить ту же схему для других имен хостов, вторичных MX-серверов или дополнительных почтовых стеков, используя ту же учетную запись и процесс ACME.

Сэкономьте 10% на SSL-сертификатах при заказе сегодня!

Быстрая выдача, надежное шифрование, 99,99% доверия к браузеру, специализированная поддержка и 25-дневная гарантия возврата денег. Код купона: SAVE10

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

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