警报证书已过期:../ssl/record/rec_layer_s3.c:1543:从托管 postfix 的同一服务器发送邮件时出现 SSL 警报编号 45

警报证书已过期:../ssl/record/rec_layer_s3.c:1543:从托管 postfix 的同一服务器发送邮件时出现 SSL 警报编号 45

因此,我在 Debian 11 机器上使用 smtp 设置了一个 smtp 服务器。当我从手机和电脑发送电子邮件时,它工作正常,但当我尝试从同一台主机发送电子邮件时,它不起作用。我在跟踪 /var/log/mail.log 时收到的错误是

Aug 11 13:15:45 mail postfix/smtps/smtpd[2740]: SSL_accept error from mail.example.net[2a02:c207:2041:2547::1]: -1
Aug 11 13:15:45 mail postfix/smtps/smtpd[2740]: warning: TLS library problem: error:14094415:SSL routines:ssl3_read_bytes:sslv3 alert certificate expired:../ssl/record/rec_layer_s3.c:1543:SSL alert number 45:
Aug 11 13:15:45 mail postfix/smtps/smtpd[2740]: lost connection after CONNECT from mail.example.net[2a02:c207:2041:2547::1]
Aug 11 13:15:45 mail postfix/smtps/smtpd[2740]: disconnect from mail.example.net[2a02:c207:2041:2547::1] commands=0/0

这是 main.cf 中与 ssl 配置相关的部分。

# TLS parameters
smtpd_tls_cert_file=/etc/letsencrypt/live/mail.example.com/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/mail.example.com/privkey.pem
smtpd_tls_security_level=may
smtpd_tls_loglevel = 1
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache


smtp_tls_security_level=may
smtp_tls_loglevel = 1
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache


smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtpd_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtp_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1

我尝试使用 Thunderbird 从另一台设备发送消息,它确实成功了。这排除了错误消息所提示的证书已过期的可能性。任何帮助都将不胜感激。

答案1

warning: TLS library problem: error:14094415:SSL routines:ssl3_read_bytes:sslv3 alert certificate expired:

您检查过这里提到的证书吗?

/etc/letsencrypt/live/mail.example.com/fullchain.pem

由于你正在使用 LetsEncrypt,所以也许你需要做的就是certbot renew

答案2

所以我弄清楚了问题所在。证书确实没有过期,但是,postfix 使用的是旧证书。它没有使用存储在 /etc/postfix/main.cf 中的证书,而是使用存储在 /etc/postfix/sni_maps.db 中的证书。为了解决这个问题,我用以下内容替换了文件 /etc/postfix/sni_maps 的内容:

mail.example.com   /etc/letsencrypt/live/new.key/privkey.pem    /etc/letsencrypt/live/new.key/fullchain.pem

然后运行命令postmap -F hash:/etc/postfix/sni_maps

这允许 postfix 使用新的证书并解决了我的问题。

相关内容