我从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服务器运行时抛出了这个异常。代码已经工作了六个月,但突然开始抛出这个例外。
似乎某些证书已过期。
答案 0 :(得分:1)
当我的应用程序(IBM Java 1.6)处理与webserver(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");
答案 1 :(得分:0)
似乎某些证书已过期。
正确。服务器证书已过期。重新获得它,或者如果你自己无法完成它,就向他们抱怨。
否则它尚未进入有效期。
答案 2 :(得分:0)
回答有关如何获取有关可能已过期证书的信息的请求:
找出您的邮件发送到哪台服务器。配置的位置取决于您发送邮件的实用程序类,JEE样式是从jboss中配置的邮件会话中获取它。
假设您将邮件发送到端口25上的某个主机,您可以使用openssl s_client
执行TLS握手来获取证书:
openssl s_client -starttls smtp -crlf -connect somehost:25
这为您提供证书本身(“----- BEGIN CERTIFICATE -----”和“----- END CERTIFICATE -----”分隔符和一些基本信息之间的base64编码部分) abobout it。将包含分隔线的证书存储在一个文件中,比如cert.pem
。
然后您可以使用
对其进行解码openssl x509 -text -noout <cert.pem
这会将证书中的所有信息作为可读文本提供。