Application: "Certbot client v.0.28/1.0" for "Let`s Encrypt" (on Python), "Courier Mail".
Основная инструкция по настройке "Let`s Encrypt" в спарке с web-сервером "Nginx" опубликована отдельно. Здесь рассматриваются лишь отличия от неё в плане интеграции с почтовым сервером "Courier Mail".
Применение сертификатов "Let`s Encrypt" в почтовом сервисе "Courier Mail".
Считая, что SSL-сертификаты уже запрошены посредством любого web-сервера в соответствии с базовой инструкцией, проведём предварительную их адаптацию к требованиям используемого почтового сервера. "Courier Mail" ожидает файл SSL-сертификата, включающий сразу "закрытую" и "открытую" части, размещённые последовательно:
# cat /etc/letsencrypt/live/mail.example.net/privkey.pem /etc/letsencrypt/live/mail.example.net/cert.pem > /etc/courier/letsencrypt.pem
# chown courier:courier /etc/courier/letsencrypt.pem
# chmod o-rwx /etc/courier/letsencrypt.pem
# chown courier:courier /etc/courier/letsencrypt.pem
# chmod o-rwx /etc/courier/letsencrypt.pem
После создания комбинированного файла с SSL-сертификатами применяем таковые в конфигурации подсистем IMAP-SSL, SMTP-SSL и SMTP-StartTLS, поддерживаемых почтовым сервером "Courier Mail", примерно следующим образом:
# vi /etc/courier/imapd-ssl
....
# Тип используемого сертификата
TLS_CERTS=X509
# Перечень поддерживаемых протоколов, по убыванию приоритета
TLS_PROTOCOL="TLS1_1:TLS1:SSL3"
# Перечень поддерживаемых методов, по убыванию приоритета
TLS_CIPHER_LIST="SSLv3:TLSv1:HIGH:!LOW:!MEDIUM:!EXP:!NULL:!aNULL@STRENGTH"
# Файл набора параметров для протокола "Diffie–Hellman"
TLS_DHCERTFILE=/etc/courier/dhparams.pem
# Файл комбинированного сертификата (private + public keys)
TLS_CERTFILE=/etc/courier/letsencrypt.pem
# Директория с публичными корневыми и промежуточными сертификатами
TLS_TRUSTCERTS=/etc/ssl/certs
....
# Тип используемого сертификата
TLS_CERTS=X509
# Перечень поддерживаемых протоколов, по убыванию приоритета
TLS_PROTOCOL="TLS1_1:TLS1:SSL3"
# Перечень поддерживаемых методов, по убыванию приоритета
TLS_CIPHER_LIST="SSLv3:TLSv1:HIGH:!LOW:!MEDIUM:!EXP:!NULL:!aNULL@STRENGTH"
# Файл набора параметров для протокола "Diffie–Hellman"
TLS_DHCERTFILE=/etc/courier/dhparams.pem
# Файл комбинированного сертификата (private + public keys)
TLS_CERTFILE=/etc/courier/letsencrypt.pem
# Директория с публичными корневыми и промежуточными сертификатами
TLS_TRUSTCERTS=/etc/ssl/certs
....
Для подсистем SMTP-SSL и SMTP-StartTLS ключевые параметры конфигурационных файлов идентичны используемых для настройки IMAP-SSL:
# vi /etc/courier/esmtpd-ssl
# vi /etc/courier/esmtpd
# vi /etc/courier/esmtpd
Перезапускаем сервисы, применяя изменения в конфигурации:
# /etc/init.d/courier-imap-ssl restart
# /etc/init.d/courier-mta restart
# /etc/init.d/courier-mta-ssl restart
# /etc/init.d/courier-mta restart
# /etc/init.d/courier-mta-ssl restart
После перезапуска можно убедиться, что почтовый сервер прослушивает соответствующие сетевые порты:
# netstat -apn | grep -i listen | grep -i "^tcp" | grep -i courier
tcp ... 0.0.0.0:993 0.0.0.0:* LISTEN .../couriertcpd
tcp ... 0.0.0.0:465 0.0.0.0:* LISTEN .../couriertcpd
tcp ... 0.0.0.0:25 0.0.0.0:* LISTEN .../couriertcpd
tcp ... 0.0.0.0:465 0.0.0.0:* LISTEN .../couriertcpd
tcp ... 0.0.0.0:25 0.0.0.0:* LISTEN .../couriertcpd
Проверка использования сертификата.
IMAP via SSL:
$ echo QUIT | openssl s_client -connect mail.example.net:993 | openssl x509 -noout -text | less
SMTP via SSL:
$ echo QUIT | openssl s_client -connect mail.example.net:465 | openssl x509 -noout -text | less
SMTP via TLS/StartTLS:
$ echo QUIT | openssl s_client -starttls smtp -connect mail.example.net:25 | openssl x509 -noout -text | less
Автоматизация продления сертификатов.
Общая идея и способ реализации автоматического продления сертификатов рассматривается в основной инструкции, а здесь лишь приводится специфичная для "Courier Mail" последовательность команд подготовки и применения обновлённой конфигурации:
# vi /opt/eff.org/cert-renew.sh
#!/bin/bash
....
# Даём указание использующему сертификаты почтовому сервису "Courier Mail" принять конфигурацию
[ "${?}" -eq "0" ] && /opt/eff.org/cert-apply-courier.sh
....
....
# Даём указание использующему сертификаты почтовому сервису "Courier Mail" принять конфигурацию
[ "${?}" -eq "0" ] && /opt/eff.org/cert-apply-courier.sh
....
Скрипт адаптации набора сертификатов "Let`s Encrypt" к формату "Courier Mail" и применения таковых:
# vi /opt/eff.org/cert-apply-courier.sh && chmod +x /opt/eff.org/cert-apply-courier.sh
#!/bin/bash
# FQDN used by mail service
DOMAIN="mail.example.net"
# Preparation of a combined SSL-file
cat "/etc/letsencrypt/live/${DOMAIN}/privkey.pem" "/etc/letsencrypt/live/${DOMAIN}/cert.pem" > /etc/courier/letsencrypt.pem
chown courier:courier /etc/courier/letsencrypt.pem
chmod o-rwx /etc/courier/letsencrypt.pem
# Applications restart
/etc/init.d/courier-imap-ssl restart
/etc/init.d/courier-mta restart
/etc/init.d/courier-mta-ssl restart
exit ${?}
# FQDN used by mail service
DOMAIN="mail.example.net"
# Preparation of a combined SSL-file
cat "/etc/letsencrypt/live/${DOMAIN}/privkey.pem" "/etc/letsencrypt/live/${DOMAIN}/cert.pem" > /etc/courier/letsencrypt.pem
chown courier:courier /etc/courier/letsencrypt.pem
chmod o-rwx /etc/courier/letsencrypt.pem
# Applications restart
/etc/init.d/courier-imap-ssl restart
/etc/init.d/courier-mta restart
/etc/init.d/courier-mta-ssl restart
exit ${?}