多年来,我们在Ubuntu 12.04服务器上使用Postfix通过提交registry单发送邮件。 这个工作最迟在2017年3月进行。
然而,突然postfix是运行到许多,虽然不是所有的域“证书validation失败”错误(按照mail.log)。 例如,它拒绝发送到Gmail地址的任何邮件,但将通过几个.edu域。 我检查了SSL证书,以确保它们是根据一些在线指南得到的最新的,并且有一个合适的ca-bundle.srt文件,并且main.cf指向正确的文件。 所有似乎退房。 再次,在2017年3月之前没有这样的问题。
如果有帮助,一个.edu邮件服务器的日志描述的例子;
Oct 3 19:20:39 server postfix/pickup[27108]: 7A1BA5E02FB: uid=33 from=<www-data> Oct 3 19:20:39 server postfix/cleanup[27114]: 7A1BA5E02FB: message-id=<07e5de6389f1ee1f0db978687a2a701c@server> Oct 3 19:20:39 server postfix/qmgr[27109]: 7A1BA5E02FB: from=<www-data@server>, size=2354, nrcpt=1 (queue active) Oct 3 19:20:39 server postfix/smtp[27116]: certificate verification failed for mailgateway[ip]:25: untrusted issuer /C=SE/O=AddTrust AB/OU=AddTrust Externa$ Oct 3 19:20:39 server postfix/pickup[27108]: C25FB5E02FC: uid=33 from=<www-data> Oct 3 19:20:39 server postfix/cleanup[27114]: C25FB5E02FC: message-id=<839ec587b4d3c56ecb8be082fa36e626@server> Oct 3 19:20:39 server postfix/qmgr[27109]: C25FB5E02FC: from=<www-data@server>, size=2354, nrcpt=1 (queue active) Oct 3 19:20:40 server postfix/smtp[27116]: 7A1BA5E02FB: to=<email>, relay=mailgateway06[ip]:25, delay=0.62, delays=0.05/0.04/0.22/0.31, dsn=2.$ Oct 3 19:20:40 server postfix/qmgr[27109]: 7A1BA5E02FB: removed Oct 3 19:20:40 server postfix/smtp[27121]: certificate verification failed for mailgateway04[ip]:25: untrusted issuer /C=SE/O=AddTrust AB/OU=AddTrust Externa$ Oct 3 19:20:41 server postfix/smtp[27121]: C25FB5E02FC: to=<email>, relay=mailgateway04[ip]:25, delay=1.4, delays=0.01/0.02/1/0.35, dsn=2.0.0,$ Oct 3 19:20:41 server postfix/qmgr[27109]: C25FB5E02FC: removed
或者为一个谷歌地址,
Oct 3 19:00:32 server postfix/pickup[25780]: C0B5E5E02FB: uid=33 from=<www-data> Oct 3 19:00:32 server postfix/cleanup[25788]: C0B5E5E02FB: message-id=<502b3fe5d32d82faca381ef6f18939f8@server> Oct 3 19:00:32 server postfix/qmgr[25781]: C0B5E5E02FB: from=<www-data@server>, size=2353, nrcpt=2 (queue active) Oct 3 19:00:32 server postfix/smtp[25790]: connect to gmail-smtp-in.l.google.com[2607:f8b0:4001:c14::1b]:25: Network is unreachable Oct 3 19:00:33 server postfix/pickup[25780]: 0542A5E02FC: uid=33 from=<www-data> Oct 3 19:00:33 server postfix/cleanup[25788]: 0542A5E02FC: message-id=<893ee1fe8af389833686860025d71966@server> Oct 3 19:00:33 server postfix/qmgr[25781]: 0542A5E02FC: from=<www-data@server>, size=2353, nrcpt=2 (queue active) Oct 3 19:00:33 server postfix/smtp[25790]: certificate verification failed for gmail-smtp-in.l.google.com[74.125.202.27]:25: untrusted issuer /C=US/O=Equifax/OU=Equifax Secure Certifi$ Oct 3 19:00:33 server postfix/smtp[25796]: connect to gmail-smtp-in.l.google.com[2607:f8b0:4001:c14::1b]:25: Network is unreachable Oct 3 19:00:33 server postfix/smtp[25796]: certificate verification failed for gmail-smtp-in.l.google.com[173.194.196.26]:25: untrusted issuer /C=US/O=Equifax/OU=Equifax Secure Certif$ Oct 3 19:00:34 server postfix/smtp[25796]: 0542A5E02FC: to=<[email protected]>, relay=gmail-smtp-in.l.google.com[173.194.196.26]:25, delay=1.1, delays=0.01/0.02/0.11/0.95, dsn=2.0.0$
可能是什么原因?
如果有帮助,这是我的main.cf文件;
# See /usr/share/postfix/main.cf.dist for a commented, more complete version # Debian specific: Specifying a file name will cause the first # line of that file to be used as the name. The Debian default # is /etc/mailname. #myorigin = /etc/mailname smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu) biff = no # appending .domain is the MUA's job. append_dot_mydomain = no # Uncomment the next line to generate "delayed mail" warnings #delay_warning_time = 4h readme_directory = no # TLS parameters smtpd_tls_cert_file = /etc/ssl/certs/smtpd.crt smtpd_tls_key_file = /etc/ssl/private/smtpd.key smtpd_use_tls=yes smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache # See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for # information on enabling SSL in the smtp client. myhostname = [SERVER_NAME_OMITTED] alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases myorigin = /etc/mailname mydestination = [SERVER_NAME_OMITTED], localhost.localdomain, localhost relayhost = mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 mailbox_size_limit = 0 recipient_delimiter = + inet_interfaces = all inet_protocols = ipv4 smtpd_sasl_local_domain = smtpd_sasl_auth_enable = yes smtpd_sasl_security_options = noanonymous broken_sasl_auth_clients = yes smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination,check_policy_service unix:private/policy-spf smtp_tls_security_level = may smtpd_tls_security_level = may smtpd_tls_auth_only = no smtp_tls_note_starttls_offer = yes smtpd_tls_CAfile = /etc/ssl/certs/ca-certificates.crt smtpd_tls_loglevel = 1 smtpd_tls_received_header = yes smtpd_tls_session_cache_timeout = 3600s tls_random_source = dev:/dev/urandom #content_filter = smtp-amavis:[127.0.0.1]:10024 home_mailbox = Maildir/ mailbox_command = spf-policyd_time_limit = 3600s
更新:我现在也尝试生成一个cacert.pem文件,如此多的网页,并设置smtp_tls_CAfile和smtpd_tls_CAfile使用该文件。 这会导致不同的错误(并且不发送邮件)。
Oct 4 01:51:51 server postfix/pickup[6816]: 969E15E02FB: uid=1000 from=<admin> Oct 4 01:51:51 server postfix/cleanup[6841]: 969E15E02FB: message-id=<20171004015151.969E15E02FB@server> Oct 4 01:51:51 server postfix/qmgr[6817]: 969E15E02FB: from=<admin@server>, size=291, nrcpt=1 (queue active) Oct 4 01:51:51 server postfix/smtp[6848]: CA certificate verification failed for gmail-smtp-in.l.google.com[74.125.129.26]:25: num=7:certificate signature failure Oct 4 01:51:52 server postfix/smtp[6848]: 969E15E02FB: to=<[email protected]>, relay=gmail-smtp-in.l.google.com[74.125.129.26]:25, delay=0.45, delays=0.06/0.07/$ Oct 4 01:51:52 server postfix/qmgr[6817]: 969E15E02FB: removed
你的Ubuntu很旧。 看来你的电子证书已经过时了。
如果您正在发送邮件,则不会使用您自己的证书。 只有收到邮件与smtpd。
smtp使用提供的ca-certificates包证书进行validation。 您可以尝试安装一个backport来修复日志中的错误。
例如ca-certificates-backport
更新:你的configuration应该包括smtp_tls_CAfile = / etc / ssl / certs / ca-certificates.crt
您需要inputCA包文件的正确path 。
请参阅Postfix TLS支持 :
$ smtpd_tls_CAfile包含一个或多个可信CA的CA证书。 在Postfix进入可选的chroot jail之前,该文件被打开(使用root权限),因此不需要从chroot jail中访问。
请注意,postfix可以在chroot jail中运行,并且不能访问CA文件 。
您可以在Postfix目录中键入其他path,例如(在我的基础结构中):
smtpd_tls_CAfile = /var/spool/postfix/etc/ssl/certs/ca-certificates.crt
文件/etc/ssl/certs/ca-certificates.crt是否存在?
如果您找不到CA文件并且不知道它放在哪里,可以使用此命令查找所有CA类似的文件:
find / \( -name "*.crt" -o -name "*.ca-bundle" -o -name "*.pem" \) -type f -size +100k
我使用CA文件的大小大于100Kb的方法(我的文件大约是270Kb)
或者你可以find所有的证书文件,并按大小sorting,只获得前10行输出查找命令:
find / \( -name "*.crt" -o -name "*.ca-bundle" -o -name "*.pem" \) -type f -exec du -sh {} \; | sort -r -h | head