即使“smtp_tls_security_level = finger”Postfix 仍然抱怨“证书验证失败”

即使“smtp_tls_security_level = finger”Postfix 仍然抱怨“证书验证失败”

我正在尝试使用 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_levelencrypt,它就可以正常工作。

答案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 是可以的,不需要真正的第三方证书。

相关内容