私の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'sEncryptのchain.pemと-certcert.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
またはtls_try_verify_hosts
を設定しない限り、Eximはクライアント証明書を要求しません。証明書については、Eximドキュメントの 暗号化されたSMTP接続 セクションで詳しく説明されています。
多くの組織は、STMPを使用するためにDNSを正しく構成するのに問題があります。 DKIMは特に厄介で、私が遭遇するほとんどの署名者は検証に失敗します。多くのサイトがサーバーを正しい有効な証明書で構成していることを私はほとんど期待していません。
最近TLSv1.0以降への接続を制限した後、多くのサーバーへのSTARTTLS
のアナウンスを停止する必要がありました。私はまだ、クライアントのTLS証明書を検証しようとはしていません。私がそうするならば、それはせいぜい彼らのスパムスコアに数えられるでしょう。 tls_peerdn
ログセレクターを有効にして、検証に合格できるサイトがあるかどうかを調査できます。
SMTP over TLSは成長していますが、標準からはほど遠いです。それを使用しているサイトは、他の手段で信頼されているサイトです。
更新:ログを確認しましたが、これまでのところ、検証に合格した送信者は2人だけです。ほとんどのクライアントは検証しませんでした。
証明書を検証してみました:
openssl.client.net
として接続しますが、これはrDNS検証を渡してはなりません。私が使用したテストコマンドは次のとおりです。
echo quit | openssl s_client -cert fullchain.pem -key privkey.pem \
-starttls smtp -connect mail.systemajik.com:587 -debug 2>&1 | less