![警报证书已过期:../ssl/record/rec_layer_s3.c:1543:从托管 postfix 的同一服务器发送邮件时出现 SSL 警报编号 45](https://linux22.com/image/788342/%E8%AD%A6%E6%8A%A5%E8%AF%81%E4%B9%A6%E5%B7%B2%E8%BF%87%E6%9C%9F%EF%BC%9A..%2Fssl%2Frecord%2Frec_layer_s3.c%3A1543%3A%E4%BB%8E%E6%89%98%E7%AE%A1%20postfix%20%E7%9A%84%E5%90%8C%E4%B8%80%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%8F%91%E9%80%81%E9%82%AE%E4%BB%B6%E6%97%B6%E5%87%BA%E7%8E%B0%20SSL%20%E8%AD%A6%E6%8A%A5%E7%BC%96%E5%8F%B7%2045.png)
因此,我在 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 使用新的证书并解决了我的问题。