我需要签署 Android 应用程序(.apk).
我有 .pfx 文件。我把它转换为 .cer 通过 Internet Explorer 文件然后转换 .cer.keystore 使用密钥工具。然后我尝试签名 .apk 与 jarsigner 但它说 .keystore 不包含私钥。

我做错了什么?

有帮助吗?

解决方案

是JDK 1.6或更高版本

已经指出由Justin在于密钥工具下面的评论单独能够这样做使用下面的命令(虽然只在JDK 1.6和更高)的:

keytool -importkeystore -srckeystore mypfxfile.pfx -srcstoretype pkcs12 
-destkeystore clientcert.jks -deststoretype JKS

是JDK 1.5或以下

的OpenSSL可以做到这一切。 上JGuru这个答案是最好的方法,我已经发现迄今

首先请确保您有 OpenSSL的安装。许多操作系统已经安装了,因为我发现了Mac OS X的。

在以下两个命令PFX文件转换成可被打开作为Java PKCS12密钥存储的格式:

openssl pkcs12 -in mypfxfile.pfx -out mypemfile.pem
openssl pkcs12 -export -in mypemfile.pem -out mykeystore.p12 -name "MyCert"

请注意,在第二命令中提供的名称是在新的密钥存储区密钥的别名。

可以验证使用Java keytool实用程序使用以下命令的密钥存储区的内容:

keytool -v -list -keystore mykeystore.p12 -storetype pkcs12

最后,如果你需要,你可以通过导入上面创建的密钥存储到一个新的密钥存储将此转换为JKS密钥库:

keytool -importkeystore -srckeystore mykeystore.p12 -destkeystore clientcert.jks -srcstoretype pkcs12 -deststoretype JKS

其他提示

的jarsigner可以使用您的PFX文件的密钥库签署您的罐子。确保您的PFX文件有私钥,当你导出的证书链。有没有需要转换为其他格式。关键是要获得的别名的您的PFX文件的:

 keytool -list -storetype pkcs12 -keystore your_pfx_file -v | grep Alias

一旦你有你的别名,签约容易

jarsigner.exe -storetype pkcs12 -keystore pfx_file jar_file "your alias"

上面两个命令会提示你在你PFX出口指定的密码。如果你想拥有你的密码挂出清晰的文本使用 -storepass -keystore 开关

在开关

一旦签署,佩服你的工作:

jarsigner.exe -verify -verbose -certs  yourjarfile

我发现页,告诉你如何导入一个PFX到JKS(Java密钥存储):

keytool -importkeystore -srckeystore PFX_P12_FILE_NAME -srcstoretype pkcs12 -srcstorepass PFX_P12_FILE -srcalias SOURCE_ALIAS -destkeystore KEYSTORE_FILE -deststoretype jks -deststorepass PASSWORD -destalias ALIAS_NAME

您的 PFX 文件中应包含私钥。直接从 PFX 文件导出私钥和证书(例如使用 OpenSSL)并将它们导入到您的 Java 密钥库中。

编辑

更多信息:

  • 下载适用于 Windows 的 OpenSSL 这里.
  • 导出私钥: openssl pkcs12 -in filename.pfx -nocerts -out key.pem
  • 出口证书: openssl pkcs12 -in filename.pfx -clcerts -nokeys -out cert.pem
  • 使用以下命令将私钥和证书导入到 Java 密钥库中 keytool.

贾斯汀(上文)是准确的。但是,请记住,这取决于你从(中间CA,参与根CA与否)或如何创建PFX /输出,有时他们可能缺少证书链中的证书谁。导入后,你将不得不PrivateKeyEntry类型的证书,但与1长度的链

要解决这个问题,有几种选择。在我的脑海中更容易的选择是导入和导出IE PFX文件(包括选择链中的所有证书的选项)。在IE浏览器证书的进口和出口的过程应该是很容易的和其他地方的良好记录。

在出口,进口密钥库贾斯汀上面所指出的。 现在,你将不得不与类型PrivateKeyEntry的证书,并具有大于1的证书链长度的密钥库中。

某些基于.NET Web服务客户端报错了(无法建立信任关系),如果你不这样做以上。

如果您使用 JDK 1.5 或更低版本,keytool 实用程序将不会有 -importkeystore 选项(参见 JDK 1.5 keytool 文档)并且 MikeD 的解决方案只能通过转移 .pfx 在具有较新 JDK(1.6 或更高版本)的计算机上。

JDK 1.5 或更低版本中的另一个选项(如果您有 Oracle WebLogic 产品)是遵循此 Oracle 文档中的说明: 将 PFX 和 PEM 证书格式与密钥库结合使用。它描述了转换为 .pem 格式,如何从该文本格式中提取证书信息,并将其导入到 .jks 格式化为 java utils.ImportPrivateKey 实用程序(这是 WebLogic 产品中包含的实用程序)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top