Назад | Перейти на главную страницу

Клиент SMTP Postfix не проверяет общесистемные сертификаты CA с помощью tls_append_default_CA

На моем SMTP-сервере Postfix с выходом в Интернет, на котором запущен Debian Wheezy, я хотел бы установить безопасное соединение с некоторыми известными серверами. Некоторые из них являются моими собственными, использующими собственный PKI / CA, некоторые являются общедоступными SMTP-серверами, такими как серверы Google Gmail. Чтобы проверить сертификаты на серверах, которые я использую, я указал

smtp_tls_CAfile = /usr/local/share/ca-certificates/Gert_van_Dijk_Root_CA_2014.crt

и чтобы убедиться, что общедоступные серверы также могут быть проверены по встроенному хранилищу сертификатов системы, я явно указал

tls_append_default_CA = yes

Чтобы убедиться, что Postfix правильно проверяет сертификат, я установил глобальный уровень безопасности TLS на «безопасный». Я снова поменяю это значение на "может" с некоторыми доменами на secure в smtp_tls_policy_maps как только я закончу отладку этой проблемы, описанной здесь.

smtp_tls_security_level = secure

Он отлично проверяет мои собственные серверы! Все они работают с сертификатами, подписанными Gert_van_Dijk_Root_CA_2014.crt. Однако похоже, что клиент SMTP на самом деле не добавляет сертификаты tls_append_default_CA настройка, когда он пытается доставить почту на SMTP-серверы Google. Я ожидал, что он добавит те из /etc/ssl/certs на Debian.

postfix/smtp[32271]: effective TLS level: secure
[...]
postfix/smtp[32271]: < alt1.gmail-smtp-in.l.google.com[64.233.164.26]:25: 220 2.0.0 Ready to start TLS
[...]
postfix/smtp[32271]: DE6D0403EB: Server certificate not verified

Вот что я пробовал:

Есть ли способ отладить SMTP клиент в Postfix работает на переднем плане? Кажется, все отладки относятся к процессу smtpd. :-(

Соответствующая дальнейшая конфигурация:

# postconf -n | grep -E "^(smtp_|tls_)"
smtp_tls_CAfile = /usr/local/share/ca-certificates/Gert_van_Dijk_Root_CA_2014.crt
smtp_tls_security_level = secure
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
tls_append_default_CA = yes

# /etc/postfix/master.cf:
tlsmgr    unix  -       -       n       1000?   1       tlsmgr
smtp      unix  -       -       n       -       -       smtp -v

С участием smtp_tls_security_level = secure и значение по умолчанию smtp_tls_secure_cert_match Постфикс (smtp_tls_secure_cert_match = nexthop, dot-nexthop) не будет доверять результату записи MX. Другими словами, postfix будет использовать следующий переход, полученный из внутренней таблицы, такой как транспортная таблица.

Вот почему постфикс все еще утверждает Сертификат сервера не проверен. Документация Postfix четко заявляет, что

Проверено (одноранговый сертификат, подписанный доверенным ЦС и проверенное имя однорангового узла; или: одноранговый сертификат с ожидаемым открытым ключом или отпечатком сертификата)

SMTP-клиент Postfix: Сертификат удаленного SMTP-сервера был подписан ЦС, которому доверяет SMTP-клиент Postfix, и имя сертификата совпадает с адресом или именами серверов. SMTP-клиент Postfix был настроен так, чтобы запрашивать подтвержденное имя, в противном случае статус проверки был бы просто «Доверенный».

Вы можете уменьшить smtp_tls_security_level к verified поэтому postfix будет доверять результату записи MX и использовать его для проверки. Другой способ описан в документация по postfix.

  • Безопасный канал TLS без переопределений таблицы транспорта (5)

    Postfix будет использовать smtp_tls_policy_maps сделать процесс проверки.

  • Безопасный канал TLS с таблицей транспорта (5) отменяет:

    В этом случае трафик на example.com и связанные с ним домены отправляется на один логический шлюз (чтобы избежать единой точки отказа, его имя может разрешаться в один или несколько адресов балансировщика нагрузки или в объединенные адреса нескольких физических хостов. ). Все физические хосты, доступные через IP-адреса шлюза, имеют логическое имя шлюза, указанное в их сертификатах.