java.security.NoSuchProviderException: no such provider: BC 的問題解決
在做Android通過https訪問tomcat時,需要做keystore證書,在使用命令:
keytool -import -alias tomcat -file server.cer -keystore server_trust.keystore -storepass 123456 -storetype BKS -providername "BC"
時,遇到了下面這個錯誤:
java.security.NoSuchProviderException: no such provider: BC
上網搜了一下,說是要下載一個叫 bcprov-jdk15-135.jar 的包,放在JAVA_HOME/jre/lib/ext目錄下,然後修改JAVA_HOME/jre/lib/security/java.security檔案,在裡面可以看到有幾行是以“security.provider.”開頭的,在它的最後序號之上加一行,如我的最後的序號是8,加入以下這行:
security.provider.9=org.bouncycastle.jce.provider.BouncyCastleProvider
然後儲存,一般來說,這樣就可以解決了,但當我做完這一步後,天殺的還是不行,仍然報java.security.NoSuchProviderException: no such provider: BC這個錯誤,於是繼續Google,網上很多人的解決方案都是這樣,無意中看到一條說是要注意你的JAVA SDK的版本是否是你剛剛存放 bcprov-jdk15-135.jar包的那個SDK,我恍然大悟,馬上用命令檢視:
ls -l /usr/bin/java
果然,這裡連結的是另一個SDK版本的路徑,不是我剛剛存放 bcprov-jdk15-135.ja
ln -s /opt/jdk/bin/java /usr/bin/java (第一個路徑引數是我存放 bcprov-jdk15-135.jar包的那個SDK)
做好之後,再試,還是報java.security.NoSuchProviderException: no such provider: BC錯誤,沮喪。。
重新看了一下生成keystore的命令,看到了,是keytool!!那個keytool的連結還沒換過來,於是再做連結,並且將之前生成的證書刪除掉,用新的keytool重新生成一遍
終於,終於....成功了!
本人經歷
使用jre裡面的keytool,不要使用jdk裡面的keytool!我的問題解決