我试图使用Postfix(RHEL6上的版本2.6.6)通过内部networking上的邮件中继来连接和发送邮件。 我想在端口25上连接STARTTLS(端口465在此服务器上不可用)。 邮件中继使用自签名的SSL / TLS证书,因此我需要使用证书颁发机构来跳过证书validation。 我发现smtp_tls_security_level = fingerprint ,它不检查信任链,到期date等,而是使用证书指纹进行validation。
我认为这是一个完美的解决scheme,但是当我尝试发送电子邮件时,我仍然在/var/log/maillog发现错误,说postfix/smtp[15182]: certificate verification failed for xxxxxxxxxxxx[zz.zz.zz.zz]:25: untrusted issuer 。
我认为fingerprint安全级别的要点是跳过证书validation。 我误解了这个选项的意思吗? 还有什么我需要configuration?
以下是main.cf中的相关行:
relayhost = [xxx.xxx.xxx] smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl-passwords smtp_sasl_security_options= smtp_generic_maps = hash:/etc/postfix/generic smtp_use_tls = yes smtp_tls_security_level = fingerprint smtp_tls_fingerprint_digest = sha1 # fingerprint changed for ServerFault. just an example. smtp_tls_fingerprint_cert_match = c1:d3:54:12:00:r0:ef:fa:42:48:10:ff:ac:1e:75:13:dd:ad:af:3e smtp_tls_note_starttls_offer = yes
编辑:加粗
在这里回答我自己的问题。 我没有设法fingerprintvalidation工作,但我发现如何获得TLS没有证书validation。 从手册 :
强制TLSencryption可以通过设置“smtp_tls_security_level = encrypt”进行configuration。 即使始终使用TLSencryption,即使服务器证书不可信或名称错误,邮件传递也会继续。
我曾尝试过这一点,但一定不能启用所有正确的选项。 但使用上面的设置,我只是改变了smtp_tls_security_level encrypt ,它工作正常。
由于Postfix启用了chroot(默认在Debian中)“/etc/postfix/master.cf”:
# ========================================================================== # service type private unpriv chroot wakeup maxproc command + args # (yes) (yes) (yes) (never) (100) # ========================================================================== smtp unix - - - - - smtp
并且variablessmtp_tls_CAfile的默认值为空,解决scheme将其设置为chroot中的证书文件的位置:
在“/etc/postfix/main.cf”中:
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt