在做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.jar包的那个SDK,于是我将它rm掉,重做一个链接,用命令:
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重新生成一遍
终于,终于....成功了!
我内牛满面 T - T