2016-07-23 91 views
0

我已經將證書導入cacerts(到了JAVA_HOME所指向的位置),但仍然出現此錯誤。無法找出問題。來自Microsoft ESMTP服務器的客戶端郵件服務器沒有防火牆問題。我可以從我的服務器telnet這個。試過SSLpoke,但它已經超時了。嘗試了端口25的tcpdump,可以看到來回的通信。基本上試圖從郵件服務器觸發出站電子郵件。javax.mail.MessagingException:無法將命令發送到SMTP主機;

詳細的錯誤日誌:

產生的原因:javax.mail.MessagingException的:無法發送命令給SMTP主機 ;嵌套的異常是: javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路徑構建失敗: sun.security.provider.certpath.SunCertPathBuilderException:無法到 找到有效的認證路徑,請求目標 at com .sun.mail.smtp.SMTPTransport.sendCommand(SMTPTransport.java:1420) at com.sun.mail.smtp.SMTPTransport.sendCommand(SMTPTransport.java:1408) at com.sun.mail.smtp.SMTPTransport.ehlo (SMTPTransport.java:847) at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:384) at javax.mail.Service.connect(Service.java:297) at javax.mail.Service .x(Service.java:156) at javax.mail.Service.connect(Service .java:105) at javax.mail.Transport.send0(Transport.java:168) at javax.mail.Transport.send(Transport.java:98) at com.issuetracker.esb.mail.GmailImpl.transportMessage (GmailImpl.java:94) 在com.issuetracker.esb.mail.Mail.sendSRMail(Mail.java:188)

回答

0

就與密鑰工具導入證書時使用-trustcacerts參數?

編輯:我在這個話題的談話已經涵蓋了發生錯誤的具體原因,但沒有「答案」的外觀,所以這裏是一個重寫。

PKIX路徑建設失敗: sun.security.provider.certpath.SunCertPathBuilderException:無法找到 有效證明路徑請求的目標

此錯誤表示的目的的有效證書鏈無法從正在運行的JRE使用的常駐密鑰庫文件(默認情況下,位於JRE的jre/lib/security/cacerts文件中)中獲取信任入局證書。

的這個典型原因包括:

忽略以包括參數導入用keytool命令證書時-trustcacerts。

當JRE正在查找證書時,它知道要匹配傳入的證書,它只會考慮以這種方式標記爲可信的證書。

證書已由根CA沒有爲其安裝根證書的JRE簽名。

通常情況下,這是由未知根證書頒發機構(CA)(例如公司自己的內部CA,即JRE一無所知)或甚至某些第三方根CA並不像其他一些大牌廠商那麼受歡迎,所以雖然瀏覽器或操作系統可能已經擁有一個根證書,但Java可能沒有隨附它。

要糾正這種情況,您還需要獲取並安裝根CA證書並將其標記爲可信。

還有一些公司提供證書籤名作爲中間人,這意味着他們自己沒有自己的根CA,但已經由受信任的根CA授予證書,允許他們進一步簽署證書籤名請求(CSR)。

在這些情況下,儘管您可能擁有自己的證書,並且已經安裝並信任底層根CA,除非您還獲得並安裝中間證書,那麼「證書鏈」將被破壞,並且有效證書路徑不能成爲製作。

在總結所以可能的解決方案包括:

  1. 執行所有證書安裝其他網站與-trustcacerts參數。
  2. 檢查密鑰庫文件中是否存在根CA證書,如果沒有,也使用keytool -importcert -trustcacerts獲取並安裝它。
  3. 檢查是否還有一箇中間證書來完成整個鏈,如果是,則還要使用keytool -importcert -trustcacerts獲取並將其安裝到密鑰庫文件中。

注意:通過雙擊該文件檢查Windows中的.crt文件,可以讓您有機會檢查證書路徑,並查看是否以及根和中介CA是否有助於顯示您需要的內容。

一旦完整且有效的證書鏈已安裝並信任到密鑰庫文件中,則應通過該錯誤。

+0

不,我沒有添加此參數。 – harsh

+0

您應該如此,以便您的keytool -importcert ...命令應該像以前一樣重複(先從cacerts文件中刪除舊的cert別名條目),但添加了-trustcacerts即使您已經指向jre/lib/security/cacerts文件,也是如此。 – topdog

+0

我使用過:keytool -import -file -alias -trustcacerts -keystore cacerts,但錯誤仍然存​​在。 – harsh

相關問題