1

アプリケーションから TLS-SMTP 経由でメールを送信しようとしています。これは、ローカル (Tomcat7、Java7、Windows) では機能しますが、運用環境 (Tomcat7、Java6、Linux) では機能しません。SMTP サーバーの公開証明書を含むトラスト ストアは、アプリケーションと共に出荷され、次の方法で手動で設定されます。

System.setProperty("javax.net.ssl.trustStore", "pathToJssecacerts")

どちらの場合も同じです。これを使用して確認しました

System.getProperty("javax.net.ssl.trustStore")

メールが送信される直前に、それぞれの環境のストアを指す絶対パスが返されます。

したがって、私の知る限り、両方のアプリケーション環境がまったく同じトラスト ストアを使用しています。(確実に確認する方法はありますか?)

私は使用しています

System.setProperty("javax.net.debug", "ssl:handshake:trustmanager");

より多くの洞察を得ることができますが、おそらく Java6 と Java7 の違いが原因で、2 つの環境間で出力がかなり異なります。本番環境 (Java6) のエラーは次のとおりです。

...
SEND TLSv1 ALERT:  fatal, description = certificate_unknown
WRITE: TLSv1 Alert, length = 2
called closeSocket()

handling exception: 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
...

つまり、私の推論に欠陥があるか、バグがあるか、これまで考慮していない別のことがここにあります。何か案は?

4

1 に答える 1