如何使用私钥将.pfx文件转换为密钥库?
我需要签署Android应用程序( .apk
)。
我有.pfx
文件。 我通过Internet Explorer将其转换为.cer
文件,然后使用keytool将.cer
转换为.keystore
。 然后,我试图用jarsigner签署.apk
,但是.keystore并不包含私钥。
我做错了什么?
使用JDK 1.6或更高版本
Justin在下面的评论中指出,keytool本身可以使用下面的命令来做到这一点(尽pipe只在JDK1.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实用程序来validation密钥存储区的内容:
keytool -v -list -keystore mykeystore.p12 -storetype pkcs12
最后如果你需要的话,你可以通过将上面创build的密钥库导入到一个新的密钥库中,将它转换成一个JKS密钥库:
keytool -importkeystore -srckeystore mykeystore.p12 -destkeystore clientcert.jks -srcstoretype pkcs12 -deststoretype JKS
jarsigner可以使用您的pfx文件作为签名jar的密钥库。 确保您的pfx文件在导出时拥有私钥和证书链。 没有必要转换为其他格式。 诀窍是获得您的pfx文件的别名 :
keytool -list -storetype pkcs12 -keystore your_pfx_file -v | grep Alias
一旦你有别名,签名很容易
jarsigner.exe -storetype pkcs12 -keystore pfx_file jar_file "your alias"
以上两个命令将提示您input在pfx export中指定的密码。 如果要以明文forms将密码挂起,请在-keystore开关之前使用-storepass开关
一旦签字,欣赏你的作品:
jarsigner.exe -verify -verbose -certs yourjarfile
我发现这个页面告诉你如何导入PFX到JKS(Java Key Store):
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密钥库。
编辑
更多信息:
- 在这里下载OpenSSL for Windows。
- 导出私钥:
openssl pkcs12 -in filename.pfx -nocerts -out key.pem
- 导出证书:
openssl pkcs12 -in filename.pfx -clcerts -nokeys -out cert.pem
- 使用
keytool
私钥和证书导入到Java密钥库中。
贾斯汀(上图)是准确的。 但是,请记住,取决于从中间CA获得证书的人员,是否涉及根CA,或者如何创build/导出pfx,有时可能会丢失证书链。 导入后,您将拥有一个PrivateKeyEntrytypes的证书,但具有长度为1的链。
要解决这个问题,有几个select。 在我心中,更容易的select是在IE中导入和导出pfx文件(select包括链中所有证书的选项)。 在IE中证书的导入和导出过程应该很容易,并且在其他地方有很好的logging。
一旦导出,导入上面指出的Justin的密钥库。 现在,您将拥有一个具有PrivateKeyEntrytypes的证书和证书链长度大于1的密钥库。
某些基于.Net的Web服务客户端出错(无法build立信任关系),如果您不这样做。
如果您使用的是JDK 1.5或更低版本,那么keytool实用程序将不具有-importkeystore
选项(请参阅JDK 1.5 keytool文档 ),只有通过将计算机上的.pfx
传输到较新的JDK(1.6或更高版本)。
在JDK 1.5或更低版本(如果您有Oracle WebLogic产品)中的另一个select是遵循此Oracle文档中的说明: 使用带密钥库的PFX和PEM证书格式 。 它描述了如何转换成.pem
格式,如何从这种文本格式中提取证书信息,并使用java utils.ImportPrivateKey
实用工具(这是WebLogic产品附带的实用工具)将其导入.jks
格式。