exim4检查客户端证书始终无效

我的exim服务器被configuration为在连接时要求客户端证书。 我build立了一个ACL(在rcpt阶段)来logging或添加一个头信息。 证书检查的结果:

warn encrypted = * ! verify = certificate #condition = ${if def:tls_in_peerdn {yes}{no}} # -> newer versions of exim use $tls_in_peerdn! condition = ${if def:tls_peerdn {yes}{no}} add_header = X-TLS-Client-Certificate: invalid (${tls_peerdn}) log_message = Invalid TLS client certificate presented (${tls_peerdn}). warn encrypted = * ! verify = certificate condition = ${if def:tls_peerdn {no}{yes}} log_message = No TLS client certificate presented. warn verify = certificate add_header = X-TLS-Client-Certificate: valid condition = false 

不幸的是我没有看到任何消息被检查为有效。 虽然检查没有证书工程。

我成立了

 tls_try_verify_hosts = * 

因此,检查发生和(使用Debian,它被包括在标准configuration中)信任锚configuration和访问:

 tls_verify_certificates = /etc/ssl/certs/ca-certificates.crt 

testing…

 openssl s_client -CAfile /etc/ssl/certs/ca-certificates.crt -verify 4 -connect mailserver.dom.tld:25 -starttls smtp -cert /etc/ssl/letsencrypt/fullchain.pem -key /etc/ssl/letsencrypt/privkey.pem 

…使用与服务器使用相同的密钥从服务器到自身,包括正确顺序的中间证书不会提供有效的检查结果。

我错过了什么?

如果您的服务器使用默认configuration,则应使用snakeoil自签名证书。 在传出和传入连接上build立TLS连接是足够的和可接受的。 然而,它会validation失败。 您将需要使用来自可信机构的证书来通过validation。

您是否向客户提供可用于login的证书? 除了您的用户提供的用户证书,我希望客户端证书经常失败。 许多服务器使用自签名证书,或者有其他问题导致validation失败。

除非设置了tls_verify_hoststls_try_verify_hosts否则Exim不会要求客户端证书。 Exim文档的“ encryption的SMTP连接”部分详细介绍了证书。

许多组织在为STMP使用正确configurationDNS时遇到困难。 DKIM特别麻烦,我遇到的大多数签名者都会失败。 我很less希望很多网站都使用正确的有效证书来configuration他们的服务器。

在最近限制连接到TLS v1.0和更高版本之后,我不得不停止向多个服务器通告STARTTLS 。 我还没有采取措施来validation任何客户的TLS证书。 如果我曾经这样做过,那么最多只能算上他们的垃圾邮件分数。 我可以启用tls_peerdn日志select器来调查是否有任何网站可以通过validation。

TLS上的SMTP越来越多,但远非标准。 那些使用它的网站是被其他方式信任的网站。

更新:我检查了我的日志,到目前为止只有两个发件人已通过validation。 大多数客户没有validation。

我试图validation我的证书:

  • OpenSSL以openssl.client.net连接,不应该通过rDNS valiation。
  • fullchain.cert不会追溯到默认信任存储中的证书。 这是可以的,因为连锁证书由信托商店中的证书签名。
  • 看来openssl甚至不会尝试发送客户端证书。 可能是因为信任链。 如果您将第三个证书添加到fullchain.pem文件,它可能会工作。
  • 我看到列出的服务器的DN,但没有表明open_ssl甚至试图发送证书。

我使用的testing命令是:

 echo quit | openssl s_client -cert fullchain.pem -key privkey.pem \ -starttls smtp -connect mail.systemajik.com:587 -debug 2>&1 | less 

参数-CAfile的值应该是你的让我们encryption的chain.pem和-cert cert.pem的值:

 openssl s_client -CAfile /etc/ssl/letsencrypt/chain.pem -verify 4 \ -connect mailserver.dom.tld:25 -starttls smtp \ -cert /etc/ssl/letsencrypt/cert.pem \ -key /etc/ssl/letsencrypt/privkey.pem 

像这样你的证书将被你的服务器validation。