繁体   English   中英

javax.mail.MessagingException:无法将命令发送到SMTP主机;

[英]javax.mail.MessagingException: Can't send command to SMTP host;

我已将证书导入到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上找到请求的目标的有效证书路径。 com.sun.mail.smtp.SMTPTransport.sendCommand(SMTPTransport.java:1408)(位于com.sun.mail.smtp.SMTPTransport.ehlo(SMTPTransport.java:847)处的.smtp.SMTPTransport.sendCommand(SMTPTransport.java:1420) )的com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:384)的javax.mail.Service.connect(Service.java:297)的javax.mail.Service.connect(Service.java:156)的在com.issuetracker的javax.mail.Transport.send0(Transport.java:168)的javax.mail.Service.connect(Service.java:105)处。 esb.mail.GmailImpl.transportMessage(GmailImpl.java:94)位于com.issuetracker.esb.mail.Mail.sendSRMail(Mail.java:188)

使用keytool导入证书时是否使用-trustcacerts参数?

编辑:我在这个话题上的谈话已经涵盖了发生错误的具体原因,但没有出现“答案”的外观,因此这里是一个重写。

PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到到请求目标的有效认证路径

此错误表明,无法从正在运行的JRE使用的驻留密钥库文件中获得用于信任传入证书的有效证书链(默认情况下,在JRE的jre / lib / security / cacerts文件中)。

造成这种情况的典型原因包括:

使用keytool命令导入证书时,忽略包含-trustcacerts参数。

当JRE寻找它知道要与传入证书匹配的证书时,它将仅考虑以这种方式标记为受信任的证书。

该证书已由根CA签署,该根CA尚未为其安装JRE的根证书。

通常,这是由证书由未知的根证书颁发机构(CA)签名引起的,例如JRE尚不了解的公司自己的内部CA,甚至是由一些不太受欢迎的第三方根CA引起的。与其他一些知名厂商一样,因此尽管浏览器或OS可能已经具有根证书,但Java可能并未附带它。

要解决此问题,您还需要获取并安装根CA证书,并将其也标记为受信任。

也有提供证书签名的公司充当中介,这意味着它们本身没有自己的根CA,但是受信任的根CA授予了证书,以允许它们进一步签署证书签名请求(CSR) 。

在这些情况下,尽管您可能已经拥有自己的证书以及已经安装并受信任的基础根CA,但是除非您还获取并安装了中间证书,否则“证书链”将断开并且无法建立有效的证书路径。

因此,概括地说,可能的解决方案包括:

  1. 使用-trustcacerts参数为其他站点执行所有证书安装。
  2. 还要检查密钥库文件中是否还存在根CA证书,如果不存在,请同时使用keytool -importcert -trustcacerts获取并安装它。
  3. 检查是否还有中间证书来完成整个链,如果是,请使用keytool -importcert -trustcacerts获取并将其安装到密钥库文件中。

注意:通过双击Windows中的.crt文件,可以为您提供检查证书路径的机会,并查看是否涉及了哪些根CA和中间CA来帮助您显示所需的内容。

一旦安装了完整且有效的证书链并将其信任到密钥库文件中,该错误就会通过。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM