![](/img/trans.png)
[英]javax.mail.MessagingException: Can't send command to SMTP host
[英]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,但是除非您還獲取並安裝了中間證書,否則“證書鏈”將斷開並且無法建立有效的證書路徑。
因此,概括地說,可能的解決方案包括:
注意:通過雙擊Windows中的.crt文件,可以為您提供檢查證書路徑的機會,並查看是否涉及了哪些根CA和中間CA來幫助您顯示所需的內容。
一旦安裝了完整且有效的證書鏈並將其信任到密鑰庫文件中,該錯誤就會通過。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.