![Debian 9 中的 exim4 收到 TLS 致命警报](https://linux22.com/image/760958/Debian%209%20%E4%B8%AD%E7%9A%84%20exim4%20%E6%94%B6%E5%88%B0%20TLS%20%E8%87%B4%E5%91%BD%E8%AD%A6%E6%8A%A5.png)
我正在尝试配置我的服务器以发送邮件,但每次尝试发送邮件时都会收到“TLS 致命警报”错误。
我已按照这个帖子与我的问题相关,试图克服该问题,但最终出现了我描述的错误:
apt install gnutls-bin
cd /etc/exim4/
certtool --generate-privkey --outfile exim.key
certtool --generate-request --load-privkey exim.key --outfile exim.csr
通用名称:gestiondecorreos.es
其余部分我留空(输入)
登录 CACert => 点击“服务器证书” => 新建
它会要求您粘贴证书请求:我粘贴了 exim.csr 文件的内容。
CACert 将要求您确认主机名。
之后,它将在结果网页中显示证书。将证书放入名为 exim.crt 的新文件中
cd /etc/exim4/ chgrp Debian-exim exim.key chmod g+r exim.key vim /etc/exim4/conf.d/main/000_local (新文件)
并插入:
MAIN_LOG_SELECTOR=+tls_cipher +tls_peerdn MAIN_TLS_ENABLE=t
更新-exim4.conf /etc/init.d/exim4 重启
我尝试通过 tls 连接到我的邮件服务器:
gnutls-cli -s -p 587 gestiondecorreos.es
ehlo gestiondecorreos.es
starttls
^D (ctr+d)
- 错误结果:
*** Starting TLS handshake
- Certificate type: X.509
- Got a certificate list of 1 certificates.
- Certificate[0] info:
- subject `EMAIL=eguz*****@gmail.com,CN=server.example.com,OU=IT,O=Vesta Control Panel,L=San Francisco,ST=California,C=US', issuer `EMAIL=eguz*****@gmail.com,CN=server.example.com,OU=IT,O=Vesta Control Panel,L=San Francisco,ST=California,C=US', serial 0x0086e738bec1714309, RSA key 4096 bits, signed using RSA-SHA256, activated `2020-02-04 15:42:00 UTC', expires `2021-02-03 15:42:00 UTC', key-ID `sha256:6095e39dc286060d74d300f494814744d803ad2f5c55587ca38a2d7ed2b58194'
Public Key ID:
sha1:5f4b******************
sha256:6095****************
Public key's random art:
+--[ RSA 4096]----+
| ..o .o|
| . o +.|
*******************
| .oo.|
+-----------------+
- Status: The certificate is NOT trusted. The certificate issuer is unknown. The name in the certificate does not match the expected.
*** PKI verification of server certificate failed...
*** Fatal error: Error in the certificate.
*** Handshake has failed
我不知道为什么会出现 CN=server.example.com 这样的主题。
/var/log/exim4/mainlog 文件显示:
TLS error on connection from lixxxxxx.members.linode.com ([127.0.0.1]) [xxxxxxxxxxx] (gnutls_handshake): A TLS fatal alert has been received.
在我的 linode-vps 中,主域名是 gestiondecorreos.es,orbelanet.com 是我正在运行 smtp 测试的另一个域名。
提前致谢!Mikel
答案1
尝试解决方案:
更改主机名(在 vestacp 中):(服务器 => gestiondecorreos.es,服务器中我的主域):
/usr/local/vesta/bin/v-change-sys-hostname gestiondecorreos.es
在 gestiondecorreos.es 中安装 letsencrypt:
/usr/local/vesta/bin/v-add-letsencrypt-domain 'admin' gestiondecorreos.es '' 'yes'
- 在 vesta、exim 和 dovecot 中应用上一步安装的 ssl 证书:
/usr/local/vesta/bin/v-update-host-certificate admin gestiondecorreos.es
在 /usr/local/vesta/conf/vesta.conf 中添加“update_hostname_ssl='yes'”:
echo "UPDATE_HOSTNAME_SSL='yes'" >> /usr/local/vesta/conf/vesta.conf
这将告诉 Vesta 每次更新 SSL 时将 SSL 更新到 Vesta、Exim 和 dovecot 守护进程。这将自动发生
解决方案
当使用前面的步骤重新创建、
exim.key
和文件并执行 tls 邮件服务测试时,exim.csr
这次没有出现错误,一切正常。exim.crt
gnutls-cli -s -p 587 gestiondecorreos.es
但是当我们尝试发送一封新邮件时,出现了以下错误:
H=lixxxxxxxx.linode.com ([127.0.0.1]) [172.xxxxxxxxxx] X=TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128 CV=no rejected MAIL <xxxx@xxxxxxxx>: Helo name contains a ip address (HELO was [127.0.0.1]) and not is valid
解决方案是我一直禁用 /etc/exim4/exim4.conf 中的以下行:
\# deny condition = ${if eq{$sender_helo_name}{}} \# message = HELO required before MAIL \# drop message = Helo name contains a ip address (HELO was $sender_helo_name) and not is valid \# condition = ${if match{$sender_helo_name}{\N((\d{1,3}[.-]\d{1,3}[.-]\d{1,3}[.-]\d{1,3})|([0-9a-f]{8})|([0-9A-F]{8}))\N}{yes}{no}} \# condition = ${if match {${lookup dnsdb{>: defer_never,ptr=$sender_host_address}}\}{$sender_helo_name}{no}{yes}} \# delay = 45s \# drop condition = ${if isip{$sender_helo_name}} \# message = Access denied - Invalid HELO name (See RFC2821 4.1.3)
重新启动 exim4:
service exim4 restart
现在我可以毫无问题地发送电子邮件了!