我試圖連接到服務器的SMTP郵件服務器的服務器上的Java方法,而我得到這個錯誤:Java:方法找不到證書路徑 - 我需要設置什麼?
stack trace: org.apache.commons.mail.EmailException: Sending the email
to the following server failed : mail.mycompanyname.com:465
獲取完整的堆棧跟蹤後,我注意到以下行,其中反覆3次/次嘗試:
nested exception is:
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException:
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException:
unable to find valid certification path to requested target
服務器在Apache服務器上安裝了證書。但是,我使用GlassFish作爲訪問Java方法的Web應用程序(在客戶端)的應用程序服務器,GlassFish位於Apache Server後面。我沒有在GlassFish上爲此證書調整任何內容。
我看到一些其他的問題,以及諸如這裏類似的答案,但我不明白如何實現它:
PKIX path building failed: unable to find valid certification path to requested target
此外,還有這個爲好,但再一次,我不知道如何使用它在我的情況下,如果適當的話:
Unable to find valid certification path to requested target - error even after cert imported
所以我的問題是,我需要做什麼,從Java的角度來看,以清除這個錯誤?
難道我只需要創建一個屬性文件,如下圖所示?:
Which is the default location for keystore/truststore of Java applications?
或者說,我還需要設置一個信任?
我是否需要在GlassFish上設置任何內容?
希望有人能幫助我在這裏的基礎知識。提前感謝您的任何意見。
UPDATE:
OK,最後用Hiro2K的下方優秀幫助了它。所缺少的是將Apache Webserver的SMTP郵件服務器使用的證書導入到GlassFish中。下面的Hiro2k的命令工作正常,但我的麻煩是找到正確的證書。
使用WHM,我可以看到郵件服務器,在我的情況下是Exim,稱爲host1.mycompany.com,所以我自然而然地選擇了自簽名的認證名host1.mycompany.com.crt 。但是,該證書已過期,因此無法使用。我不得不進入Exim的配置文件來找到它的名爲exim.crt的證書,並將其導入到GlassFish中。然後它工作。
請注意,服務器上還有許多證書,包括imap(例如imapd.pem)和pop3(pop3.pem)等。很令人困惑。
謝謝Hiro2k,我以前購買過一個證書,它安裝在Apache Webserver中。 GlassFish不會直接與客戶交談。但是,Java方法可能使用GlassFish與Apache Webserver進行通信。我需要在我的java方法中設置系統屬性,例如karthik列出的嗎? http://stackoverflow.com/questions/5871279/java-ssl-and-cert-keystore – ggkmath
當證書到期並且我得到一個新證書時,是否需要重複此過程將證書導入GlassFish? – ggkmath
您不應該設置任何系統屬性,GlassFish已經擁有它們。您需要像我說的那樣將證書導入GlassFish信任庫。如果是這種情況,你也必須重複這個過程。 – Hiro2k