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
鳩には私の鍵と証明書を指定するオプションしかありません。
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
答え1
必要なのは接続証明書です。次のように作成できます。
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
エラーは発生しません(他のすべての項目が正しく設定されている場合)。
答え2
通常、サーバーは要求するクライアントに中間証明機関証明書と一緒にサーバー証明書を提供するため、クライアントはチェーンの最上位証明書を信頼できる(ルート)証明書の1つと一致させることができます。これはapache、dovecot、postfixに対応します。 Dovecotには信頼チェーン設定がないようです。したがって、この場合、信頼チェーンはサーバー証明書とマージされ、それを指す必要があります。
ssl_cert = </etc/ssl/server-plus-chain.pem
証明書の順序は次のとおりです。
- サーバー証明書
- 仲介証明書
最後の中間証明書は、クライアントが使用できる信頼できるルート証明書によって発行されます。
答え3
アプリケーションがSSLサーバーとして機能する場合は、クライアントに提供される証明書などの証明書とキーが必要です。アプリケーションがSSLクライアントとして機能するため、サーバーによって提供された証明書を確認する必要がある場合は、信頼できるCAのリストが必要です。
postfixはサーバー(メールを受け入れる)とクライアント(別のメールサーバーにメールを送信)の両方の役割を果たすことができますが、dovecotはサーバーにすぎないため、信頼できるCAのリストは必要ありません。
答え4
CA証明書に複数のファイルがある場合は、次の問題を解決できます。
ssl_verify_client_cert = yes
ssl_ca = </etc/ssl/myssl/startssl.pem
ssl_ca = </etc/ssl/myssl/sub.class2.server.ca.pem