Инструкция: выпуск сертификатов Let’s Encrypt и настройка Postfix

1. Общие принципы (запомнить один раз)

  1. Для почтовых серверов и принтеров — всегда RSA --key-type rsa --rsa-key-size 2048
  2. Один сертификат = одно имя сервера
    • mail.example.ru
    • mx1.example.ru
      (SAN можно, но для простоты лучше 1:1)
  3. Postfix всегда использует fullchain.pem + privkey.pem
  4. Обновлением занимается certbot + systemd timer
    → руками продлевать не нужно

2. Выпуск сертификата (эталонный способ)

Через nginx (рекомендуется)

certbot certonly \
  --nginx \
  --key-type rsa \
  --rsa-key-size 2048 \
  -d mail.example.ru \
  --cert-name mail-example-rsa

Проверка

openssl x509 -in /etc/letsencrypt/live/mail-example-rsa/cert.pem \
  -noout -text | grep "Public Key Algorithm"

Должно быть:

Public Key Algorithm: rsaEncryption

3. Где лежат файлы сертификата

/etc/letsencrypt/live/mail-example-rsa/
├── cert.pem        # сам сертификат (обычно не нужен)
├── chain.pem       # цепочка (обычно не нужен)
├── fullchain.pem   # СЕРТИФИКАТ + ЦЕПОЧКА  ← используем
├── privkey.pem     # ПРИВАТНЫЙ КЛЮЧ        ← используем

4. Настройка Postfix (/etc/postfix/main.cf)

Минимально правильная конфигурация TLS

smtpd_tls_cert_file = /etc/letsencrypt/live/mail-example-rsa/fullchain.pem
smtpd_tls_key_file  = /etc/letsencrypt/live/mail-example-rsa/privkey.pem

smtpd_tls_security_level = may
smtp_tls_security_level  = may

smtpd_tls_protocols = !SSLv2,!SSLv3
smtpd_tls_mandatory_protocols = !SSLv2,!SSLv3

smtp_tls_protocols = !SSLv2,!SSLv3
smtp_tls_mandatory_protocols = !SSLv2,!SSLv3

smtpd_tls_loglevel = 1
smtp_tls_loglevel  = 1

После изменений:

postfix reload

5. Порты 587 и 465 (если используешь)

В master.cf должны быть включены, остальное можно не усложнять:

587 (submission)

submission inet n - n - - smtpd
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes

465 (smtps)

465 inet n - n - - smtpd
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes

6. Автопродление сертификатов (один раз проверить)

Проверка таймера

systemctl list-timers | grep certbot

Должен быть certbot.timer.

Тестовое продление

certbot renew --dry-run

Если без ошибок — всё ок.


7. Автоперезагрузка Postfix после продления (рекомендуется)

Создать хук:

nano /etc/letsencrypt/renewal-hooks/deploy/reload-postfix.sh

Содержимое:

#!/bin/sh
systemctl reload postfix

Права:

chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-postfix.sh

8. Что загружать в принтеры / МФУ

Правильно:

  • корневой сертификат
  • ISRG Root X1
wget https://letsencrypt.org/certs/isrgrootx1.pem

Если нужен DER:

openssl x509 -in isrgrootx1.pem -outform der -out isrgrootx1.der

В принтер:

  • CA certificate → isrgrootx1.pem или .der

НЕ нужно:

  • fullchain.pem
  • privkey.pem

9. Быстрая проверка сервера

openssl s_client -starttls smtp -connect mail.example.ru:587
openssl s_client -connect mail.example.ru:465

Главное:

  • Verify return code: 0 (ok)
  • CN совпадает с именем сервера