天天看點

JDK導入安全證書失敗異常問題解決

    今天項目啟動遇到了證書異常問題,網上搜了安全證書的導入方式,還是出現一些比較少見的異常,下面記錄下來且給出了解決方 案,希望可以給後續遇到相同問題的同學 提供解決思路。

      JDK證書的導入方式,百度随意搜尋都可以找到。下面給出了一些我遇到的問題。

問題一:

CMD指令行視窗,顯示    'keytool' 不是内部或外部指令,也不是可運作的程式或批處理檔案。

JDK導入安全證書失敗異常問題解決

解決辦法: 

keytool.exe檔案是在JDK安裝bin路徑中,例如我的檔案路徑在:C:\Program Files\Java\jdk1.8.0_121\bin這個目錄(此處根據自己安裝的路徑選擇),如下圖示:

JDK導入安全證書失敗異常問題解決

切換cmd指令到該路徑下運作,即可解決上述問題。

JDK導入安全證書失敗異常問題解決

問題二:

   按照教程安裝證書時,出現下面類似的提示錯誤:

使用 "keytool -help" 擷取所有可用指令 C:\Program Files\Java\jdk1.8.0_121\bin>keytool -import -alias ctrip -keystore %JAVA_HOME%\jre\lib\security\cacerts -file d:\Ctriproot.cer -trustcacerts 非法選項: Files\Java\jdk1.8.0_121\jre\lib\security\cacerts keytool -importcert [OPTION]... 導入證書或證書鍊
           

  有非法選項之類的提示的。

解決辦法:

 這可能是因為路徑中存在空格或者檔案名存在空格的情況,指令識别錯誤。将對應的 -keystore "%JAVA_HOME%/jre/lib/security/cacerts"  密鑰庫名稱中路徑用雙引号“” 以及 %JAVA_HOME% 方式來表示。

給大家一個參考的導入指令:

keytool -import -alias ctrip -file "d:\Ctriproot.cer" -keystore "%JAVA_HOME%/jre/lib/security/cacerts"  -storepass changeit -trustcacerts

其中 紅體字 表示需要新添加的證書的路徑,綠色字型表示 對應的密鑰庫名稱所在路徑。

注意: 因為我們不是在正常密鑰庫路徑  %JAVA_HOME%\jdk1.8.0_121\jre\lib\security  下運作cmd,是以此時不能用

-keystore cacerts ,應該指定全路徑 -keystore "%JAVA_HOME%/jre/lib/security/cacerts";

即 當切換到 cacerts 檔案所在的目錄時,才可指定 -keystore cacerts, 否則應該指定全路徑;

問題三:

排除掉上述錯誤後還是報錯,可能是因為需要以管理者身份 運作cmd指令。例如下面報錯:

JDK導入安全證書失敗異常問題解決

或者其他的權限方面的報錯。可以嘗試以 管理者身份運作。

解決辦法:

以 管理者身份  運作CMD 指令,具體操作步驟如下示:

左鍵單擊開始菜單,進入開始菜單,直接鍵盤輸入cmd。在出現的結果中找到cmd運用,右鍵單擊--以管理者運作,如下圖所示

JDK導入安全證書失敗異常問題解決
JDK導入安全證書失敗異常問題解決

  如此,即可以 管理者身份運作指令行。  這是WIN10系統的解決辦法。

最後,給出我導入安全證書的指令以及檢視相應的證書的指令,大家可以參考使用哈!注意 要更改對應的紅色字型 路徑 為個人的路徑哦。

//檢視cacerts中的證書清單:

keytool -list -keystore "%JAVA_HOME%/jre/lib/security/cacerts"  -storepass  changeit

//導入指定證書到cacerts:

keytool -import -alias ctrip -file "d:\Ctriproot.cer" -keystore "%JAVA_HOME%/jre/lib/security/cacerts"  -storepass changeit -trustcacerts

//删除cacerts中指定名稱的證書:

keytool -delete -alias ctrip -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -storepass changeit

//檢視cacerts中的證書清單:

keytool -list -keystore "%JAVA_HOME%/jre/lib/security/cacerts"  -storepass  changeit

//導入指定證書到cacerts:

keytool -import -alias ctrip -file "d:\Ctriproot.cer" -keystore "%JAVA_HOME%/jre/lib/security/cacerts"  -storepass changeit -trustcacerts

//删除cacerts中指定名稱的證書:

keytool -delete -alias ctrip -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -storepass changeit
           

各個選項含義: 

keytool:密鑰和證書管理工具; 

-import:導入證書選項,也可以使用-importcert代替; 

-trustcacerts:信任來自cacerts 的證書 

-alias :要處理的條目的别名 

-file :輸入檔案名,即證書的位置 

-storepass :密鑰庫密碼 

-keystore :密鑰庫名稱

 參考博文:jdk如何導入安全證書;

                  将安全證書導入到java的cacerts證書庫

繼續閱讀