Мой exim-сервер настроен на запрос клиентских сертификатов при установлении соединения. Я установил ACL (на этапе rcpt) для регистрации или добавления заголовка, соответственно. результата проверки сертификата:
warn
encrypted = *
! verify = certificate
#condition = ${if def:tls_in_peerdn {yes}{no}} # -> newer versions of exim use $tls_in_peerdn!
condition = ${if def:tls_peerdn {yes}{no}}
add_header = X-TLS-Client-Certificate: invalid (${tls_peerdn})
log_message = Invalid TLS client certificate presented (${tls_peerdn}).
warn
encrypted = *
! verify = certificate
condition = ${if def:tls_peerdn {no}{yes}}
log_message = No TLS client certificate presented.
warn
verify = certificate
add_header = X-TLS-Client-Certificate: valid
condition = false
К сожалению, ни одно сообщение, которое я вижу, не проверяется как действительное. Однако проверка на отсутствие сертификата работает.
Я настроил
tls_try_verify_hosts = *
Итак, проверка выполняется и (при использовании Debian она включена в стандартную конфигурацию) настраиваются и доступны якоря доверия:
tls_verify_certificates = /etc/ssl/certs/ca-certificates.crt
Тестирование с ...
openssl s_client -CAfile /etc/ssl/certs/ca-certificates.crt -verify 4 -connect mailserver.dom.tld:25 -starttls smtp -cert /etc/ssl/letsencrypt/fullchain.pem -key /etc/ssl/letsencrypt/privkey.pem
... от сервера к самому себе с использованием того же ключа, что и сервер, включая промежуточные сертификаты в правильном порядке, не дает действительного результата проверки.
Что мне не хватает?
Если ваш сервер использует конфигурацию по умолчанию, он должен использовать snakeoil
самоподписанный сертификат. Этого достаточно и приемлемо для установления соединений TLS для исходящих и входящих соединений. Однако он не пройдет проверку. Вам нужно будет использовать сертификат от доверенного центра для прохождения проверки.
Предоставляете ли вы клиентам сертификаты, которые они могут использовать вместо входа в систему? Я бы ожидал, что сертификаты клиентов будут часто выходить из строя, кроме ваших пользователей, которым предоставлены сертификаты пользователей. Многие серверы используют самозаверяющий сертификат или имеют другие проблемы, которые могут вызвать сбои проверки.
Exim не будет запрашивать сертификат клиента, если вы не установите tls_verify_hosts
или tls_try_verify_hosts
. Сертификат хорошо освещен в Зашифрованные SMTP-соединения раздел документации Exim.
У многих организаций возникают проблемы с правильной настройкой DNS для использования STMP. DKIM вызывает особые хлопоты, и большинство подписывающих сторон, с которыми я сталкиваюсь, не проходят проверку. Я мало надеюсь, что многие сайты настроили свои серверы с правильными действующими сертификатами.
После недавнего ограничения подключений к TLS v1.0 и выше мне пришлось прекратить объявлять STARTTLS
к ряду серверов. Я еще не прибегал к проверке сертификатов TLS для каких-либо клиентов. Если я когда-нибудь это сделаю, это будет в лучшем случае засчитываться в их рейтинг спама. Я могу включить tls_peerdn
селектор журнала, чтобы выяснить, могут ли какие-либо сайты пройти проверку.
SMTP через TLS растет, но далеко от стандарта. Те сайты, которые его используют, - это сайты, которым доверяют иными способами.
ОБНОВЛЕНИЕ: я проверил свои журналы, и пока только два отправителя прошли проверку. Большинство клиентов не подтвердили.
Я пробовал проверить свой сертификат:
openssl.client.net
который не должен проходить проверку rDNS. Я использовал тестовую команду:
echo quit | openssl s_client -cert fullchain.pem -key privkey.pem \
-starttls smtp -connect mail.systemajik.com:587 -debug 2>&1 | less
Значение параметра -CAfile должно быть вашим Let's encrypt chain.pem и значением -cert cert.pem:
openssl s_client -CAfile /etc/ssl/letsencrypt/chain.pem -verify 4 \
-connect mailserver.dom.tld:25 -starttls smtp \
-cert /etc/ssl/letsencrypt/cert.pem \
-key /etc/ssl/letsencrypt/privkey.pem
Таким образом, ваш сертификат будет проверен вашим сервером.