0

从 Java 发送邮件时出现以下异常。

31/03 14:06:19:571 INFO [ ] IBSUtils sendMailfromsmtp() MessagingException in Sending Mail :javax.mail.MessagingException: Can't send command to SMTP host;
nested exception is:
    javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: timestamp check failed

它在独立的 java 程序中发送邮件,但在从 JBoss 服务器运行时抛出此异常。代码已经工作了六个月,但突然开始抛出这个异常。

似乎某些证书已过期。

4

3 回答 3

1

当我的应用程序(IBM Java 1.6)处理与网络服务器(Oracle Java 1.6)的连接时,我曾经遇到过这种错误。协商 SSH 协议时可能会出现握手异常。

你最好手动设置你的 Java 协议。

// Using IBM jre there will be a handshake failure as IBM java 1.6 will
// negotiate to server SSLv3 protocol while it SHOULD be TLSv1
    System.setProperty("https.protocols", "TLSv1");
于 2014-04-01T05:44:33.897 回答
0

回答您有关如何获取有关可能已过期证书的信息的请求:

  • 找出您的邮件被发送到哪个服务器。配置的位置取决于您发送邮件的实用程序类,JEE 风格是从 jboss 中配置的邮件会话中获取它。

  • 假设您将邮件发送到端口 25 上的某个主机,您可以使用openssl s_client执行 TLS 握手来获取证书:

openssl s_client -starttls smtp -crlf -connect somehost:25

这将为您提供证书本身(“-----BEGIN CERTIFICATE-----”和“-----END CERTIFICATE-----”分隔符之间的base64编码部分以及有关它的一些基本信息。将包含分隔线的证书存储在文件中,例如cert.pem.

然后你可以使用解码它

openssl x509 -text -noout <cert.pem

这会将证书中的所有信息作为可读文本提供给您。

于 2014-04-01T06:04:02.970 回答
0

似乎某些证书已过期。

正确的。服务器证书已过期。更新它,或者如果您无法自己完成它,请向他们投诉。

否则它还没有进入有效期。

于 2014-04-01T05:39:00.663 回答