各種サーバの中間証明書の扱い

中間証明書をどう設定するか問題

postfix

smtpd_tls_cert_file = /etc/letsencrypt/live/example.net/cert.pem
smtpd_tls_key_file = /etc/letsencrypt/live/example.net/privkey.pem
smtpd_tls_CAfile = /etc/letsencrypt/live/example.net/chain.pem

Let’s Encryptの場合こんな感じ
smtpd_tls_CAfileに中間証明書を指定する
smtpd_tls_cert_fileにfullchain.pemを指定するやり方はNG

dovecot

10-ssl.conf

ssl_ca = </etc/letsencrypt/live/example.net/chain.pem

これはダメ
この設定はクライアント証明書用ですので

正しくは、こんな感じに、まとめたやつを指定すればOK

ssl_cert = </etc/letsencrypt/live/example.net/fullchain.pem

apache

SSLCACertificateFileという設定はクライアント証明書用なのでここに入れない

SSLCertificateFile    /etc/letsencrypt/live/example.net/fullchain.pem

dovecot同様に中間証明書もまとめて指定する

まとめ

この問題はスマホのK-9 Mailでメール読もうとしたときに判明した
(突然CertPathValidatorExceptionって怒られた)
thunderbirdでメール読んでた時には発生しなかったのでなんだろなーと思ったんだけどこっちは多めにroot証明書入ってるみたいね

サーバー設定後はこんな感じで中間証明書まで確認したほうが良いかも

openssl s_client -connect example.org:465 -showcerts

thunderbirdだけで確認すると痛い目を見るよと言うお話でした