1

我正在尝试使用 keytool(在 Mac OS X 上使用终端应用程序)创建一个“bks”密钥库。我按照以下说明进行操作:
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):

  1. 删除命令的-providerpath选项,keytool
  2. bcprov-jdk16-146.jar里面的{$JAVA_HOME/lib/ext}文件夹
  3. 添加security.provider.3=org.bouncycastle.jce.provider.BouncyCastleProvider到 java.security 文件。

但它仍然失败了。

关于我可以做些什么来成功创建 BKS 密钥库的任何想法?

4

4 回答 4

4

从那以后已经很多年了,但我也在尝试这个。

答案是您的参数顺序错误。-providerpath 需要位于 -providerclass 参数之前。

我希望这对将来寻找解决方案的人有所帮助。

于 2015-06-25T10:25:15.467 回答
2

我从来没有能够成功使用 Keytool。这就是我为解决问题所做的:我复制了由 Eclipse(Indigo,SR2)第一次在 Eclipse 中运行 Android 程序时自动创建的默认 debug.keytool(一个 JKS 类型密钥库),并且使用 Portecle (http://portecle.sourceforge.net/) 将其转换为 BKS 类型的密钥库。现在这是棘手的部分:如果我现在使用 debug.keytool 的 BKS 版本代替原来的版本,每当我尝试运行安卓程序。但是,如果我将 debug.keytool 的原始 JKS 版本留在 Eclipse 创建它的默认目录中,那么我可以在 Android 程序中使用 debug.keytool 的 BKS 版本 s /resources/raw 子文件夹并让 Android 打开它并识别它。吉姆

于 2012-08-27T02:15:45.787 回答
1

一个简单的替代方法是使用Portecle生成 BKS:

  1. 下载所需的Boucycastle Provider
  2. 替换 Portecle 安装目录中的 bcprov.jar(例如:)C:\Program Files (x86)\Portecle\bcprov.jar。需要相同的命名。
  3. 重新启动 Portecle 并生成您的 BKS 信任库。

更多解释在这里

于 2015-12-09T10:30:36.047 回答
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 文件。

谢谢

于 2019-09-24T11:52:17.093 回答