我有一台家庭服务器,并将系统驱动器更新为 SSD,因为它位于 /home 和 /var 的 USB 和 HDD 组合上。因为 USB 位于以前版本的 Debian 上,所以我进行了全新安装,这也将我升级到了 EXIM 版本 4.95,之前我使用的是 4.94.2。
尽管智能主机配置相同,但要使用 ISP 的 SMTP 服务器,它不再使用 TLS 并给出验证错误。
/var/log/exim4/mainlog:
2022-04-12 03:30:25 1ne6I7-000AHw-MF TLS session: (certificate verification failed): delivering unencrypted to H=<DOMAIN> [<IP>] (not in hosts_require_tls)
Run Code Online (Sandbox Code Playgroud)
邮件仍然以未加密的方式被接受,但现在来自 cron 作业的邮件被我的 ISP 标记为垃圾邮件。唯一的变化是消息的标题从原来的Received变成了。所以想必正是这种差异导致了它需要额外的关注。with esmtpsa (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2)with esmtp (Exim 4.95)
我一直使用与之前安装相同的自签名密钥和证书(带有 2013 年)时间戳。我还尝试生成一对新的,但效果类似。
在网上搜索建议后,建议使用 LetsEncrypt 配置,以便对其进行验证。我已经使用过它,但它在 EXIM 中导致了相同的行为。
这是我的配置
/etc/exim4/update-exim4.conf.conf:
dc_eximconfig_configtype='smarthost'
dc_other_hostnames='<LOCAL DOMAIN>'
dc_local_interfaces='127.0.0.1 ; ::1'
dc_readhost=''
dc_relay_domains=''
dc_minimaldns='false'
dc_relay_nets=''
dc_smarthost='<ISP DOMAIN>:587'
CFILEMODE='644'
dc_use_split_config='true'
dc_hide_mailname='false'
dc_mailname_in_oh='true'
dc_localdelivery='maildir_home'
Run Code Online (Sandbox Code Playgroud)
/etc/exim4/etc/exim4/conf.d/main/00_local_settings:
MAIN_TLS_ENABLE = yes
MAIN_TLS_CERTIFICATE = /etc/letsencrypt/live/<LOCAL DOMAIN>/fullchain.pem
MAIN_TLS_PRIVATEKEY = /etc/letsencrypt/live/<LOCAL DOMAIN>/privkey.pem
Run Code Online (Sandbox Code Playgroud)
/etc/letsencrypt/archive/<本地域>/*15.*
-rw-r--r-- 1 root Debian-exim 1870 Mar 28 00:48 /etc/letsencrypt/archive/<LOCAL DOMAIN>/cert15.pem
-rw-r--r-- 1 root Debian-exim 3749 Mar 28 00:48 /etc/letsencrypt/archive/<LOCAL DOMAIN>/chain15.pem
-rw-r--r-- 1 root Debian-exim 5619 Mar 28 00:48 /etc/letsencrypt/archive/<LOCAL DOMAIN>/fullchain15.pem
-rw------- 1 root Debian-exim 1708 Mar 28 00:48 /etc/letsencrypt/archive/<LOCAL DOMAIN>/privkey15.pem
Run Code Online (Sandbox Code Playgroud)
我还有/etc/exim4/passwd.client包含 SMTP 登录详细信息的文件,显然该文件正在发送邮件。
是一个指向我家庭IP地址的域名。
00_local_settings 中的 LetsEncrypt 密钥条目指向其指向当前版本的符号链接。在这些上,我更改了组所有权,以便 EXIM 可以看到私钥,但保留权限。
我以前的工作配置是相同的,但具有自签名exim.crt和exim.key文件/etc/exim4,因此我的 00_local_settings 文件中没有后两行。
我还尝试将 LetsEncrypt 文件复制到其中/etc/exim4并命名它们exim.cert,并exim.key使用相同的权限 640,00_local_settings 中没有任何内容,但它没有改变任何内容。
特别令人烦恼的是,作为最终测试,我只是删除了这些键,而没有对它们进行配置来看看会发生什么。我遇到了同样的错误,所以我无法判断我使用的密钥是否有问题,或者根本没有看到它们。
我继续研究,并找到了某种答案。我不清楚正在验证谁的证书,我假设是我的证书,但意识到它可能是远程 SMTP 服务器之一。
添加以下条目以/etc/exim4/etc/exim4/conf.d/main/00_local_settings禁用验证,允许使用 TLS。
REMOTE_SMTP_SMARTHOST_TLS_VERIFY_HOSTS = !*
Run Code Online (Sandbox Code Playgroud)
这可以在消息头中确认,消息头现在显示已收到消息with esmtpsa (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95)
我认为这就是之前发生的情况,并且 Debian 或 Exim 已将默认设置更改为自我初始配置以来需要验证。
据推测,如果远程服务器使用自行生成的证书,则无法验证?