exim4 檢查客戶端證書總是無效
我的 exim 伺服器配置為在建立連接時請求客戶端證書。我設置了一個 ACL(在 rcpt 階段)來記錄或添加一個標題。證書檢查結果:
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,它包含在標準配置中)信任錨已配置並可以訪問:
tls_verify_certificates = /etc/ssl/certs/ca-certificates.crt
測試…
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
…從伺服器到自身使用與伺服器使用相同的密鑰,包括按正確順序的中間證書不會給出有效的檢查結果。
我錯過了什麼?
參數 -CAfile 的值應該是您的 Let’s encrypt 的 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
像這樣,您的證書將由您的伺服器驗證。
如果您的伺服器使用預設配置,它應該使用
snakeoil
自簽名證書。這對於在傳出和傳入連接上建立 TLS 連接是足夠且可接受的。但是,它將無法通過驗證。您將需要使用來自受信任機構的證書才能通過驗證。您是否為客戶提供了可以用來代替登錄的證書?除了為您的使用者提供使用者證書外,我希望客戶端證書經常失敗。許多伺服器使用自簽名證書,或者存在其他會導致驗證失敗的問題。
tls_verify_hosts
除非您設置或,否則 Exim 不會要求提供客戶端證書tls_try_verify_hosts
。Exim 文件的加密 SMTP 連接部分 很好地介紹了證書。許多組織無法正確配置其 DNS 以使用 STMP。DKIM 特別麻煩,我遇到的大多數簽名者都無法通過驗證。我不太希望許多站點已經使用正確的有效證書配置了他們的伺服器。
在最近限制連接到 TLS v1.0 及更高版本之後,我不得不停止
STARTTLS
向許多伺服器發布消息。我還沒有嘗試為任何客戶端驗證 TLS 證書。如果我這樣做了,它最多會計入他們的垃圾郵件分數。我可以啟用tls_peerdn
日誌選擇器來調查是否有任何站點可以通過驗證。基於 TLS 的 SMTP 正在增長,但遠未達到標準。那些確實使用它的站點是通過其他方式受到良好信任的站點。
更新:我檢查了我的日誌,到目前為止只有兩個發件人通過了驗證。大多數客戶沒有驗證。
我嘗試驗證我的證書:
- OpenSSL 連接
openssl.client.net
不應該通過 rDNS 驗證。- fullchain.cert 不會追溯到預設信任庫中的證書。這沒關係,因為鏈證書是由信任庫中的證書籤名的。
- 看來 openssl 甚至沒有嘗試發送客戶端證書。可能是因為信任鏈。如果您將第三個證書添加到 fullchain.pem 文件,它可能會起作用。
- 我看到列出的伺服器的 DN,但沒有跡象表明 open_ssl 甚至嘗試發送證書。
我使用的測試命令是:
echo quit | openssl s_client -cert fullchain.pem -key privkey.pem \ -starttls smtp -connect mail.systemajik.com:587 -debug 2>&1 | less