这很简单,至少使用jdk6...
bash$ keytool -keystore foo.jks -genkeypair -alias foo \
-dname 'CN=foo.example.com,L=Melbourne,ST=Victoria,C=AU'
输入密钥库密码:
重新输入新密码:
输入密钥密码
(如果与密钥库密码相同,请按回车):
bash$ keytool -keystore foo.jks -exportcert -alias foo | \
openssl x509 -inform der -text
输入密钥库密码:asdasd
证书:
数据:
版本:3(0x2)
序列号:1237334757(0x49c03ae5)
签名算法:dsaWithSHA1
颁发者:C=AU, ST=Victoria, L=Melbourne, CN=foo.example.com
有效期:
之前:Mar 18 00:05:57 2009 GMT
之后:Jun 16 00:05:57 2009 GMT
主题:C=AU, ST=Victoria, L=Melbourne, CN=foo.example.com
主题公钥信息:
公钥算法:dsaEncryption
DSA公钥:
公钥:
00:e2:66:5c:e0:2e:da:e0:6b:a6:aa:97:64:59:14:
7e:a6:2e:5a:45:f9:2f:b5:2d:f4:34:27:e6:53:c7:
bash$ keytool -importkeystore -srckeystore foo.jks \
-destkeystore foo.p12 \
-srcstoretype jks \
-deststoretype pkcs12
输入目标密钥库密码:
重新输入新密码:
输入源密钥库密码:
别名foo的条目导入成功。
导入命令完成:成功导入1个条目,0个条目失败或取消
bash$ openssl pkcs12 -in foo.p12 -out foo.pem
输入导入密码:
MAC验证成功
输入PEM密码短语:
验证 - 输入PEM密码短语:
bash$ openssl x509 -text -in foo.pem
证书:
数据:
版本:3(0x2)
序列号:1237334757(0x49c03ae5)
签名算法:dsaWithSHA1
颁发者:C=AU, ST=Victoria, L=Melbourne, CN=foo.example.com
有效期:
之前:Mar 18 00:05:57 2009 GMT
之后:Jun 16 00:05:57 2009 GMT
主题:C=AU, ST=Victoria, L=Melbourne, CN=foo.example.com
主题公钥信息:
公钥算法:dsaEncryption
DSA公钥:
公钥:
00:e2:66:5c:e0:2e:da:e0:6b:a6:aa:97:64:59:14:
7e:a6:2e:5a:45:f9:2f:b5:2d:f4:34:27:e6:53:c7:
bash$ openssl dsa -text -in foo.pem
读取DSA密钥
输入PEM密码短语:
私钥:(1024位)
私钥:
00:8f:b1:af:55:63:92:7c:d2:0f:e6:f3:a2:f5:ff:
1a:7a:fe:8c:39:dd
公钥:
00:e2:66:5c:e0:2e:da:e0:6b:a6:aa:97:64:59:14:
7e:a6:2e:5a:45:f9:2f:b5:2d:f4:34:27:e6:53:c7:
你最终得到的是:
- foo.jks - Java格式的密钥库。
- foo.p12 - PKCS#12格式的密钥库。
- foo.pem - 密钥库中的所有密钥和证书,以PEM格式。
(如果需要,最后一个文件可以拆分为密钥和证书。)
命令摘要 - 创建JKS密钥库:
keytool -keystore foo.jks -genkeypair -alias foo \
-dname 'CN=foo.example.com,L=Melbourne,ST=Victoria,C=AU'
命令摘要 - 将JKS密钥库转换为PKCS#12密钥库,然后转换为PEM文件:
keytool -importkeystore -srckeystore foo.jks \
-destkeystore foo.p12 \
-srcstoretype jks \
-deststoretype pkcs12
openssl pkcs12 -in foo.p12 -out foo.pem
如果您的JKS密钥库中有多个证书,并且您只想导出与其中一个别名关联的证书和密钥,您可以使用以下变体:
keytool -importkeystore -srckeystore foo.jks \
-destkeystore foo.p12 \
-srcalias foo \
-srcstoretype jks \
-deststoretype pkcs12
openssl pkcs12 -in foo.p12 -out foo.pem
命令摘要 - 比较 JKS 密钥库和 PEM 文件:
keytool -keystore foo.jks -exportcert -alias foo | \
openssl x509 -inform der -text
openssl x509 -text -in foo.pem
openssl dsa -text -in foo.pem