修正する:

修正する:

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

証明書の順序は次のとおりです。

  1. サーバー証明書
  2. 仲介証明書

最後の中間証明書は、クライアントが使用できる信頼できるルート証明書によって発行されます。

答え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

関連情報