我正在尝试使用keytool和openssl应用程序将Java密钥库文件转换为PEM文件 . 但我找不到转换的好方法 . 有任何想法吗?
我没有将密钥库直接转换为PEM,而是首先尝试创建PKCS12文件,然后转换为相关的PEM文件和密钥库 . 但我无法使用它们 Build 连接 . (请注意,我只需要一个PEM文件和一个密钥库文件来实现安全连接 . 没有像“从一个java密钥库文件开始”这样的限制 . :)所以从我的情况开始可以从其他格式开始)
但是从jks到pem的直接转换方法是优选的 .
13 回答
这很简单,至少使用jdk6 ......
你最终得到:
foo.jks - java格式的密钥库 .
foo.p12 - PKCS#12格式的密钥库 .
foo.pem - 来自密钥库的所有密钥和证书,采用PEM格式 .
(如果您愿意,可以将此最后一个文件拆分为密钥和证书 . )
命令摘要 - 创建JKS密钥库:
命令摘要 - 将JKS密钥库转换为PKCS#12密钥库,然后转换为PEM文件:
如果您的JKS密钥库中有多个证书,并且您只想导出与其中一个别名关联的证书和密钥,则可以使用以下变体:
命令摘要 - 将JKS密钥库与PEM文件进行比较:
使用StoBor命令时,我一直收到来自
openssl
的错误:出于某种原因,只有这种命令方式才适用于我的JKS文件
关键是设置
destkeypass
,参数的值无关紧要 .keytool
命令不允许您从密钥库中导出私钥 . 您必须编写一些Java代码才能执行此操作 . 打开密钥库,获取所需的密钥,并将其保存为PKCS#8格式的文件 . 也保存关联的证书 .使用OpenSSL实用程序将这些文件(二进制格式)转换为PEM格式 .
使用keytool从jks直接转换为pem文件
将JKS文件转换为PEM和KEY格式(.crt&.key)的简化说明:
我找到一个非常有趣的解决方案
http://www.swview.org/node/191
然后,我将公钥/私钥对分成两个文件private.key publi.pem,它可以工作!
好吧,来自#12档案的OpenSSL should do it handily:
可能有关错误/失败的详细信息?
使用以下命令可以轻松地将JKS KeyStore转换为单个PEM文件:
说明:
keytool -list -rfc -keystore "myKeystore.jks"
以PEM格式列出'myKeyStore.jks' KeyStore中的所有内容 . 但是,它还会打印额外的信息 .| sed -e "/-*BEGIN [A-Z]*-*/,/-*END [A-Z]-*/!d"
过滤掉了我们不需要的一切 . 我们只剩下KeyStore中所有内容的PEM .>> "myKeystore.pem"
将PEM写入文件'myKeyStore.pem' .如果您没有安装openssl并且您正在寻找快速解决方案,那么有一个名为portcle的软件,它非常有用且下载量很小 .
缺点是据我所知,没有命令行 . 但是从GUI中,导出PEM私钥非常简单:
打开JKS密钥库
右键单击您的私钥条目,然后选择导出
选择私钥和证书以及PEM格式
试试Keystore Explorer http://keystore-explorer.org/
KeyStore Explorer是Java命令行实用程序keytool和jarsigner的开源GUI替代品 . 它也是openssl / pkcs12 .
首先创建密钥库文件
C:\ Program Files \ Android \ Android Studio \ jre \ bin> keytool -keystore androidkey.jks -genkeypair -alias androidkey
输入密钥库密码:
重新输入新的密码:
你的名字和姓氏是什么?未知: FirstName LastName
您的组织单位的名称是什么?未知: Mobile Development
您的组织名称是什么?未知: your company name
您所在城市或地区的名称是什么?您所在州或省的名称是什么?
这个单位的双字母国家代码是什么?未知:IN //按Enter键
是CN = FirstName LastName,OU =移动开发,O =您的公司名称,L = CityName,ST = StateName,C = IN是否正确? [不]: yes
输入密钥密码(如果与密钥库密码相同则返回):如果需要相同密码,请按Enter键
C:\ Program Files \ Android \ Android Studio \ jre \ bin> keytool -export -rfc -alias androidkey -file android_certificate.pem -keystore androidkey.jks
输入密钥库密码:
证书存储在文件中
首先将密钥库从JKS转储到PKCS12
将新的pkcs12文件转储到pem中
你应该有pem格式的证书和私钥 . 将它们分开 . 将“BEGIN CERTIFICATE”和“END CERTIFICATE”之间的部分放入cert.x509.pem将“BEGIN RSA PRIVATE KEY”和“END RSA PRIVATE KEY”之间的部分放入private.rsa.pem将私钥转换为pk8格式为预期的signapk
最精确的答案必须是这是不可能的 .
Java密钥库仅是加密密钥 and 证书的存储工具,而PEM仅是X.509证书的文件格式 .