我正在尝试使用 Postfix(RHEL6 上的版本 2.6.6)连接到我们内部网络上的邮件中继并通过该中继发送邮件。我想使用端口 25 上的 STARTTLS 进行连接(此服务器上没有端口 465)。邮件中继使用自签名 SSL/TLS 证书,因此我需要跳过使用证书颁发机构的证书验证。我发现smtp_tls_security_level = fingerprint
它不检查信任链、到期日期等。而是使用证书指纹进行验证。
我认为这是完美的解决方案,但是当我尝试发送电子邮件时,仍然出现/var/log/maillog
错误postfix/smtp[15182]: certificate verification failed for xxxxxxxxxxxx[zz.zz.zz.zz]:25: untrusted issuer
。
我以为安全级别的全部目的fingerprint
是跳过证书验证。我误解了这个选项的意义了吗?我还需要配置其他东西吗?
以下是相关内容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
编辑:添加粗体
答案1
我要在这里回答我自己的问题。我没有设法让fingerprint
验证工作,但我确实发现了如何在没有证书验证的情况下获得 TLS。从手动的:
可以通过设置“smtp_tls_security_level = encrypt”来配置强制 TLS 加密。尽管始终使用 TLS 加密,但即使服务器证书不受信任或名称错误,邮件传递仍会继续。
我曾经尝试过这个,但肯定没有启用所有正确的选项。但使用上面的设置,我只需更改smtp_tls_security_level
为encrypt
,它就可以正常工作。
答案2
由于 Postfix 已启用 chroot(Debian 中默认启用)“/etc/postfix/master.cf”:
# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
# ==========================================================================
smtp unix - - - - - smtp
以及变量的默认值smtp_tls_CA文件为空,解决方案是通过 de chroot 内部的证书文件的位置进行设置的:
在“/etc/postfix/main.cf”中:
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
答案3
假设您已准备好证书文件,编辑文件 /etc/postfix/main.cf:
smtpd_tls_key_file = /etc/ssl/private/YOURFILE.key
smtpd_tls_cert_file = /etc/ssl/certs/YOURFILE.crt
smtpd_tls_CAfile = /etc/ssl/certs/YOURFILE.crt
smtpd_tls_CApath = /etc/ssl/certs
(相应更改文件名和路径)
我确认 Let's encrypt 是可以的,不需要真正的第三方证书。