Postfixで、秘密鍵、証明書、CAの証明書を指定しました
smtpd_tls_CAfile = /etc/ssl/cacert.pem
smtpd_tls_key_file = /etc/ssl/server.key
smtpd_tls_cert_file = /etc/ssl/server.pem
Dovecotには、私のキーと私の証明書を指定するオプションしかありません:
ssl_cert = </etc/ssl/server.pem
ssl_key = </etc/ssl/server.key
CAの証明書を指定するにはどうすればよいですか?
問題は、クライアントをポート993に接続すると、証明書エラーが発生することです。 openssl s_client -connect server:993
を使用すると、次のエラーが発生します。
verify return:1
verify error:num=27:certificate not trusted
verify return:1
verify error:num=21:unable to verify the first certificate
verify return:1
ポート465(Postfix)に接続すると、このエラーは発生しません。
openssl s_client -connect server:465
必要なのはチェーン証明書です。次のように作成できます。
cat /etc/ssl/server.pem /etc/ssl/cacert.pem > /etc/ssl/chain.pem
チェーンをサーバー証明書として使用します
ssl_cert = </etc/ssl/chain.pem
ssl_key = </etc/ssl/server.key
openssl s_client
に接続すると、エラーは発生しません(他のすべてが正しく設定されている場合)。
通常、サーバーは要求側のクライアントにサーバー証明書とすべての中間証明機関の証明書を提供するため、クライアントはチェーンの最上位の証明書を自分の信頼された(ルート)証明書の1つと照合できます。 Apache、dovecot、postfixについても同様です。 Dovecotにはトラストチェーンの設定がないようです。この場合、トラストチェーンはサーバー証明書とマージされ、ポイントされる必要があります。
ssl_cert = </etc/ssl/server-plus-chain.pem
証明書の順序は
最後の中間証明書は、クライアントが利用できる信頼されたルート証明書によって発行されます。
アプリケーションがSSLサーバーとして機能する場合は、証明書とキーが必要です。証明書はクライアントに提示されるものです。アプリケーションがSSLクライアントとして機能し、サーバーから提示された証明書を検証する必要がある場合は、信頼できるCAのリストが必要です。
Postfixはサーバー(メールを受け入れる)とクライアント(メールを別のメールサーバーに配信する)の両方として機能しますが、dovecotはサーバーにすぎないため、信頼できるCAのリストは必要ありません。
複数のファイルがある場合のCA証明書は、以下を解決することが可能です
ssl_verify_client_cert = yes
ssl_ca = </etc/ssl/myssl/startssl.pem
ssl_ca = </etc/ssl/myssl/sub.class2.server.ca.pem