3

Java Mail API と TLS の基礎を理解しようとしています。次のシナリオがあります。

TLS と SSL を使用する STMP サーバーがあります。いくつかのクライアントでこのサーバーにログオンすると、認証済みおよび検証済みの電子メールを問題なく送信できます。

次に、前述の SMTP サーバーを使用してメールを送信する Web サーバーを別のマシンで実行しようとしました。TLS と SSL の電子メールを引き続き送信したいのですが、起動プロパティをどのように構成しても、次のよく知られたエラーが表示されます。

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

同様の問題を抱えている人がたくさんいることがわかりましたが、私の質問は次のとおりです。

前に説明したシナリオを考慮して、何らかの種類の証明書を Web サーバー (JRE のどこかで可能) に取得する必要がありますか、それとも、メール サーバーが既にその証明書と認証メカニズムを実行しているため、正常に動作する必要がありますか。SMTP サーバーの証明書を使用するだけでよいのではないでしょうか? とにかく、STMP サーバーを使用するマシンに証明書をインストールする必要がある場合、どうすればその証明書を取得できますか?

私はJavaMail APIを初めて使用し、これに関する多くの記事を見てきましたが、私の質問に対する白黒の答えを見つけることができませんでした.

4

2 に答える 2

3

クライアント (あなたの場合は Web サーバー上で実行されているクライアント) は、メール サーバーの SSL 証明書を確認する必要があります。Java トラストストアにその証明書が含まれていないようです。

そのため、その証明書を JRE のデフォルトのトラストストアに入れるか (これはお勧めしません)、アプリケーション用に別のトラストストアを定義する必要があります (もちろん、メール サーバーの証明書を含める必要があります)。これを行うには、次の VM パラメータを設定します。Djavax.net.ssl.trustStore=<path-to-truststore>

編集:ああ、あなたの質問の一部を見逃しました。メール サーバーの証明書を取得するには、openssl などを使用します。例を参照してください: https://serverfault.com/questions/139728/how-to-download-ssl-certificate-from-a-website

于 2013-05-30T09:25:31.033 に答える
2

答えはJavaMail FAQにあります。

リンクされたサイトからの引用文:

Q: SSL 経由でメール サーバーに接続すると、「要求されたターゲットへの有効な証明書パスが見つかりません」などの例外が発生します。

A: お使いのサーバーは、商用認証局によって署名された証明書ではなく、テスト証明書または自己署名証明書を使用している可能性があります。サーバーの証明書を信頼ストアにインストールする必要があります。InstallCert プログラムが役に立ちます。

または、「mail.protocol.ssl.trust」プロパティをメール サーバーのホスト名に設定することもできます。詳細については、プロトコル プロバイダー パッケージの javadoc を参照してください。

この問題のその他の一般的な原因は次のとおりです。

  • リクエストを傍受しているファイアウォールまたはウイルス対策プログラムがあります。
  • JDK のインストールに問題があり、信頼できる認証局の証明書を見つけることができません。
  • JDK の信頼できる認証局のリストを上書きしたアプリケーション サーバーで実行しています。
于 2013-05-30T18:47:02.073 に答える