我已将证书导入cacerts(JAVA_HOME所指向的位置),但仍然出现此错误。无法弄清楚问题。客户端的邮件服务器(Microsoft ESMTP服务器)没有防火墙问题。我可以从我的服务器远程登录。试过SSLpoke,但它已经超时了。尝试端口25的tcpdump,可以看到来回通信。基本上是尝试从邮件服务器触发出站电子邮件。
详细的错误日志是:
引起:javax.mail.MessagingException:无法向SMTP发送命令 主办;嵌套异常是: javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径构建失败: sun.security.provider.certpath.SunCertPathBuilderException:无法 找到所请求目标的有效证书路径 在com.sun.mail.smtp.SMTPTransport.sendCommand(SMTPTransport.java:1420) 在com.sun.mail.smtp.SMTPTransport.sendCommand(SMTPTransport.java:1408) 在com.sun.mail.smtp.SMTPTransport.ehlo(SMTPTransport.java:847) at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:384) 在javax.mail.Service.connect(Service.java:297) 在javax.mail.Service.connect(Service.java:156) 在javax.mail.Service.connect(Service.java:105) 在javax.mail.Transport.send0(Transport.java:168) 在javax.mail.Transport.send(Transport.java:98) 在com.issuetracker.esb.mail.GmailImpl.transportMessage(GmailImpl.java:94) 在com.issuetracker.esb.mail.Mail.sendSRMail(Mail.java:188)
答案 0 :(得分:0)
使用keytool导入证书时是否使用了-trustcacerts参数?
编辑:我在这个主题上的谈话已经涵盖了发生错误的具体原因,但没有出现“回答”,所以这里是重写。
PKIX路径构建失败: sun.security.provider.certpath.SunCertPathBuilderException:无法 找到所请求目标的有效证书路径
此错误表示无法从正在运行的JRE使用的驻留密钥库文件中获取用于信任传入证书的有效证书链(默认情况下,在JRE' s jre / lib / security中/ cacerts文件)。
这种情况的典型原因包括:
使用keytool命令导入证书时,忽略包含参数-trustcacerts。
当JRE正在寻找与之相匹配的证书时,它只会考虑以这种方式标记为受信任的证书。
证书已由根CA签署,JRE尚未为其安装根证书。
通常,这是因为证书由未知的根证书颁发机构(CA)签名,例如公司自己的内部CA(JRE对此尚不了解),甚至是某些第三方root CA并不像其他一些大牌供应商那样受欢迎,因此虽然浏览器或操作系统可能已经拥有根证书,但Java可能没有附带它。
要解决此问题,您还需要获取并安装根CA证书并将其标记为可信任。
还有一些提供证书签名的公司充当中间人,这意味着他们自己没有自己的根CA,但是由受信任的根CA提供证书以允许他们进一步签署证书签署请求(CSR)。
在这些情况下,虽然您可能拥有自己的证书并且已经安装并信任了基础根CA,但除非您还获得并安装了中间证书,否则“证书链”会被证实。已损坏,无法建立有效的证书路径。
总结可能的解决方案包括:
注意:通过双击文件来检查Windows中的.crt文件,可以让您有机会检查证书路径,看看是否以及涉及哪些根和中间CA来帮助显示您需要的内容。
一旦安装了完整有效的证书链并将其置于密钥库文件中,就应该传递错误。