2013-05-06 69 views
3
  1. 用JKS文件調用遠程Web服務的Java代碼。
  2. 如何使用證書訪問授權服務。 並添加了請定義java密鑰庫。 我很新這些過程。 我收到以下錯誤,而試圖與此相關的java程序使用jks文件訪問https服務

    cause javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: 
    PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException 
    

我奮力的最後一個月。請任何人做有需要的人。 原諒我的語法錯誤。

+3

以及這與C#,PHP或Javascript o_O有關? – HamZa 2013-05-06 11:00:00

+1

對不起,我不知道這意味着什麼。任何如何感謝你讓我知道標籤 – 2013-05-06 11:06:26

回答

4

首先您需要從您嘗試連接的服務器獲取公共證書。這可以通過多種方式完成,例如聯繫服務器管理員並詢問它,使用openssl下載它,或者如果它是HTTP服務器,則使用任何瀏覽器連接到它,查看頁面的安全信息,以及保存證書的副本。 (谷歌應該能夠準確地告訴你該怎麼做你的特定瀏覽器。)

現在你已經將證書保存在一個文件中,你需要將它添加到你的JVM的信任存儲。對於JDK,在$ JAVA_HOME/jre/lib/security /或對於JRE的$ JAVA_HOME/lib/security中,有一個名爲cacerts的文件,它隨Java一起提供,幷包含衆所周知的證書頒發機構的公用證書。導入新的證書,因爲誰都有寫權限cacerts的用戶運行密鑰工具:

keytool -import -file <the cert file> -alias <some meaningful name> -keystore <path to cacerts file> 

它很可能會要求你輸入密碼。 Java附帶的默認密碼是「changeit」。幾乎沒有人改變它。完成這些相對簡單的步驟後,您將安全地進行通信,並保證您正在與正確的服務器通信,並且只有正確的服務器(只要不丟失私鑰)。

+0

謝謝。雖然有一種方法可以[以編程方式獲取另一個密鑰存儲](http://stackoverflow.com/a/28967860/1134080),但這看起來更加優雅,也更容易實現(它不需要任何代碼更改)。在將服務器證書提取到'.cer'文件後,我按照您的回答將其添加到我的客戶端應用程序使用的JVM的'cacerts'密鑰存儲區。 PS:Linux/AIX用戶,如果遇到問題,請檢查您的權限。 – ADTC 2015-05-06 10:40:55