Java信任库在生产中不起作用

时间:2013-12-16 19:45:22

标签: java ssl truststore

我正在尝试通过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之间存在差异。 生产中的错误(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
...

所以要么我的推理存在缺陷,要么是错误,或者到目前为止我还没有考虑过另一件事。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

此消息表示Java无法使用您的证书构建信任链。

作为测试,您可以尝试设置属性

System.setProperty("mail.smtp.ssl.trust", "*");

此属性将覆盖默认行为并信任所有证书。

注意:不建议在制作中使用。