今天項目啟動遇到了證書異常問題,網上搜了安全證書的導入方式,還是出現一些比較少見的異常,下面記錄下來且給出了解決方 案,希望可以給後續遇到相同問題的同學 提供解決思路。
JDK證書的導入方式,百度随意搜尋都可以找到。下面給出了一些我遇到的問題。
問題一:
CMD指令行視窗,顯示 'keytool' 不是内部或外部指令,也不是可運作的程式或批處理檔案。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL1kDNzETNygTM5AzNwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
解決辦法:
keytool.exe檔案是在JDK安裝bin路徑中,例如我的檔案路徑在:C:\Program Files\Java\jdk1.8.0_121\bin這個目錄(此處根據自己安裝的路徑選擇),如下圖示:
切換cmd指令到該路徑下運作,即可解決上述問題。
問題二:
按照教程安裝證書時,出現下面類似的提示錯誤:
使用 "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指令。例如下面報錯:
或者其他的權限方面的報錯。可以嘗試以 管理者身份運作。
解決辦法:
以 管理者身份 運作CMD 指令,具體操作步驟如下示:
左鍵單擊開始菜單,進入開始菜單,直接鍵盤輸入cmd。在出現的結果中找到cmd運用,右鍵單擊--以管理者運作,如下圖所示
如此,即可以 管理者身份運作指令行。 這是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證書庫