На моем 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
Вот что я пробовал:
Отключение chroot в master.cf
для клиента smtp вот так:
smtp unix - - n - - smtp
Не помогло.
Добавить подробное ведение журнала. я добавил -v
к строке выше. Пришлось отключить ограничение скорости rsyslog, но это ничего не улучшило. Единственная строка, в которой упоминается о проверке TLS, - это DE6D0403EB: Server certificate not verified
линия.
Попытка ограничить процесс, чтобы увидеть, не столкнется ли он с какой-либо проблемой с доступом к сертификатам CA. Похоже, что клиент SMTP запускается как новый процесс для каждой попытки доставки. Это заставляет генерала strace -p <PID>
невозможно.
Ищите похожие проблемы. Я только нахожу эта очень похожая проблема, но это о не с указанием smtp_tls_CAfile
настройка, которую я делаю. С smtp_tls_CAfile
установить, это действительно должно добавить общесистемные сертификаты CA.
Возврат всех к значениям по умолчанию Debian, за исключением smtp_tls_security_level = secure
. Он тоже не доставляет в Google с той же ошибкой. Значит, ошибка в Postfix Debian?
То же, что и выше, затем отключите chroot для SMTP-клиента, а затем установите smtp_tls_CApath = /etc/ssl/certs
явно. По-прежнему не удается проверить сертификат.
Добавление уровня отладки TLS. Показывает:
postfix/tlsmgr[17486]: write smtp TLS cache entry smtp:64.233.164.26:25:mx.google.com&p=1&c=aNULL:-aNULL:ALL:!EXPORT:!LOW:+RC4:@STRENGTH:!aNULL&l=268439647: time=1421622891 [data 1975 bytes]
postfix/smtp[17485]: alt1.gmail-smtp-in.l.google.com[64.233.164.26]:25: subject_CN=mx.google.com, issuer_CN=Google Internet Authority G2, fingerprint 88:C0:85:C8:CB:96:29:8F:4E:15:11:80:C5:9A:89:0D, pkey_fingerprint=E0:32:29:21:69:38:EA:F9:B6:0C:F6:BD:86:12:16:B9
postfix/smtp[17485]: Untrusted TLS connection established to alt1.gmail-smtp-in.l.google.com[64.233.164.26]:25: TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)
postfix/smtp[17485]: DE6D0403EB: Server certificate not trusted
Ручная проверка OpenSSL в той же системе показывает, что все действительно должно быть в порядке.
$ openssl s_client -connect 64.233.164.26:25 -starttls smtp
CONNECTED(00000003)
depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CA
verify error:num=20:unable to get local issuer certificate
verify return:0
С также отключением chroot для tlsmgr у меня НАКОНЕЦ Trusted TLS connection established
, но postfix все равно считает, что соединение небезопасно (Server certificate not verified
):
postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: certificate verification depth=3 verify=1 subject=/C=US/O=Equifax/OU=Equifax Secure Certificate Authority
postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: certificate verification depth=2 verify=1 subject=/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: certificate verification depth=1 verify=1 subject=/C=US/O=Google Inc/CN=Google Internet Authority G2
postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: certificate verification depth=0 verify=1 subject=/C=US/ST=California/L=Mountain View/O=Google Inc/CN=mx.google.com
postfix/smtp[27198]: SSL_connect:SSLv3 read server certificate A
postfix/smtp[27198]: SSL_connect:SSLv3 read server key exchange A
postfix/smtp[27198]: SSL_connect:SSLv3 read server done A
postfix/smtp[27198]: SSL_connect:SSLv3 write client key exchange A
postfix/smtp[27198]: SSL_connect:SSLv3 write change cipher spec A
postfix/smtp[27198]: SSL_connect:SSLv3 write finished A
postfix/smtp[27198]: SSL_connect:SSLv3 flush data
postfix/smtp[27198]: SSL_connect:SSLv3 read server session ticket A
postfix/smtp[27198]: SSL_connect:SSLv3 read finished A
postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: subjectAltName: aspmx.l.google.com
postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: subjectAltName: alt1.aspmx.l.google.com
postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: subjectAltName: alt2.aspmx.l.google.com
postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: subjectAltName: alt3.aspmx.l.google.com
postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: subjectAltName: alt4.aspmx.l.google.com
postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: subjectAltName: gmail-smtp-in.l.google.com
postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: subjectAltName: alt1.gmail-smtp-in.l.google.com
postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: subjectAltName: alt2.gmail-smtp-in.l.google.com
postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: subjectAltName: alt3.gmail-smtp-in.l.google.com
postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: subjectAltName: alt4.gmail-smtp-in.l.google.com
postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: subjectAltName: gmr-smtp-in.l.google.com
postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: subjectAltName: alt1.gmr-smtp-in.l.google.com
postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: subjectAltName: alt2.gmr-smtp-in.l.google.com
postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: subjectAltName: alt3.gmr-smtp-in.l.google.com
postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: subjectAltName: alt4.gmr-smtp-in.l.google.com
postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: subjectAltName: mx.google.com
postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: subjectAltName: aspmx2.googlemail.com
postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: subjectAltName: aspmx3.googlemail.com
postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: subjectAltName: aspmx4.googlemail.com
postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: subjectAltName: aspmx5.googlemail.com
postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25 CommonName mx.google.com
postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: subject_CN=aspmx.l.google.com, issuer_CN=Google Internet Authority G2, fingerprint 88:C0:85:C8:CB:96:29:8F:4E:15:11:80:C5:9A:89:0D, pkey_fingerprint=E0:32:29:21:69:38:EA:F9:B6:0C:F6:BD:86:12:16:B9
postfix/smtp[27198]: Trusted TLS connection established to gmail-smtp-in.l.google.com[173.194.67.26]:25: TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)
postfix/smtp[27198]: 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-адреса шлюза, имеют логическое имя шлюза, указанное в их сертификатах.