簡體   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