我正在尝试使用keytool创建一个“bks”密钥库(在Mac OS X上使用终端应用)。我遵循以下说明:
keytool error: java.security.KeyStoreException: BKS not found
这是我的用法:
keytool -genkeypair -v -alias androiddebugkey -keyalg RSA -keysize 2048 -validity 10000 -keypass android -keystore /Users/djames/dropbox/bc146keystore/debug.keystore -storepass android -storetype BKS -providerclass org.bouncycastle.jce.provider.BouncyCastleProvider –providerpath /Users/djames/dropbox/bc146keystore/bcprov-jdk16-146.jar -dname "CN=Android Debug, OU=Android, O=Android, L=Whitefish, S=MT, C=US"
我收到以下错误:
keytool error: java.lang.RuntimeException: Usage error, ?providerpath is not a legal command
java.lang.RuntimeException: Usage error, ?providerpath is not a legal command
at sun.security.tools.KeyTool.parseArgs(KeyTool.java:375)
我看过无数网帖(包括上面的帖子)推荐的-provider path
选项,当我运行keytool -help
时,它确认语法合法:
keytool usage: ...
-genkeypair [-v] [-protected]
[-alias <alias>]
[-keyalg <keyalg>] [-keysize <keysize>]
[-sigalg <sigalg>] [-dname <dname>]
[-validity <valDays>] [-keypass <keypass>]
[-keystore <keystore>] [-storepass <storepass>]
[-storetype <storetype>] [-providername <name>]
[-providerclass <provider_class_name> [-providerarg <arg>]] ...
[-providerpath <pathlist>]
我还尝试了以下替代方案(每http://docs.oracle.com/javase/6/docs/technotes/guides/security/crypto/CryptoSpec.html):
-providerpath
命令的keytool
选项,bcprov-jdk16-146.jar
放在{$JAVA_HOME/lib/ext}
文件夹security.provider.3=org.bouncycastle.jce.provider.BouncyCastleProvider
添加到java.security文件中。但它仍然失败。
关于我可以采取哪些不同方法来创建BKS密钥库的任何想法?
答案 0 :(得分:4)
多年以来,我也在尝试这个。
答案是您的参数顺序错误。 -providerpath需要之前 -providerclass参数。
我希望这有助于将来寻找解决方案。
答案 1 :(得分:2)
我无法使用Keytool取得成功。这就是我为解决问题所做的工作:我在Eclipse中首次运行android程序时自动创建了Eclipse(Indigo,SR2)创建的默认debug.keytool(一个JKS类型密钥库),使用Portecle(http://portecle.sourceforge.net/)将其转换为BKS类型的密钥库。现在这是一个棘手的部分:如果我现在使用BKS版本的debug.keytool代替原始版本,我在Eclipse中遇到“Android包装错误”“java.io.IOException:无效的密钥库格式”每当我尝试运行android程序。但是,如果我将原始JKS版本的debug.keytool保留在Eclipse创建它的默认目录中,那么我可以在Android程序的/ resources / raw子文件夹中使用debug.keytool的BKS版本并让Android打开它并识别它。吉姆
答案 2 :(得分:0)
一个简单的替代方法是使用Portecle生成BKS:
C:\Program Files (x86)\Portecle\bcprov.jar
)。需要相同的命名。更多解释here。
答案 3 :(得分:0)
我正在尝试使用证书进行SSL连接,因此要在Android中支持,我需要将jks / bks文件用作信任存储。
因此生成的jks文件在android SSLSocket连接中尝试过,但是 引发jks无法读取的异常。所以我必须添加 Boncycastle提供程序到JVM并使用jks文件创建bks
下载Bouncycastle提供程序jar文件并将其放在以下路径下:
C:\Program Files\Java\jre1.8.0_191\lib\ext
通过添加以下文件的提供程序来更新java.security文件
C:\Program Files\Java\jre1.8.0_191\lib\security\java.security
添加提供商
security.provider.12=org.bouncycastle.jce.provider.BouncyCastleProvider
关闭命令提示符并打开执行命令以获取bks文件,如下所示:
keytool -importkeystore -srckeystore <input>.jks -destkeystore <required_bks_file_name>.bks -srcstoretype JKS -deststoretype BKS -srcstorepass <jsk file password> -deststorepass <jsk file password> -provider org.bouncycastle.jce.provider.BouncyCastleProvider
现在您可以将bks文件保存在文件夹中了。
谢谢