如何使用keytool将证书创建为PKCS12密钥库?

31

我想使用keytool程序将证书创建为PKCS12 keystore格式。

该密钥库具有扩展名.pfx

我该如何实现这一点?

2个回答

61
如果密钥库是PKCS12类型(.pfx),则必须使用-storetype PKCS12指定它(为了易读性添加了换行符):
keytool -genkey -alias <desired certificate alias> 
    -keystore <path to keystore.pfx>
    -storetype PKCS12 
    -keyalg RSA 
    -storepass <password> 
    -validity 730 
    -keysize 2048 

问题的关键在于,如果密钥库扩展名为.pfx,则必须添加选项-storetype PKCS12。如果没有此选项,keytool会抛出错误。 - David García González
3
使用 keytool -list 命令时,务必添加 -storetype PKCS12 参数,以便在结果中看到 Keystore type: PKCS12 而不是 Keystore type: JKS。请参见 此相关答案 - johnsampson

4

对于问题的关键,我有额外的答案。

使用JDK 8(1.8.0_121-b13),如果您删除-storetype pkcs12,则不会出现异常,但是keytool将创建一个JKS密钥库,而.pfx扩展名将被忽略。

它还要求提供-keypass mykeypassword,但keytool不支持PKCS12的此选项。

%JAVA_HOME%/bin/keytool -genkeypair -alias mykey -keyalg EC -dname "cn=CN, ou=OU, o=O, c=C" -validity 365 -keystore keystore.pfx -keypass mykeypassword -storepass mystorepassword -v

(translated)
Generating keypair (Type EC, 256 Bit) and self-signed certificate (SHA256withECDSA) with a validity of 365 days
    for: CN=CN, OU=OU, O=O, C=C
[keystore.pfx saved]

列出内容:

%JAVA_HOME%/bin/keytool -list -keystore keystore.pfx -storepass mystorepassword 

(translated)
Keystore-Type: JKS
Keystore-Provider: SUN

Keystore contains 1 entry.

mykey, 25.04.2017, PrivateKeyEntry,
Certificate-Fingerprint (SHA1): A1:6C:5F:8F:43:37:1A:B6:43:69:08:DE:6B:B9:4D:DB:05:C9:D5:84

你会看到这是一个Java密钥库。

接下来的问题是,即使在使用-list列出密钥库时指定 -storetype pkcs12,keytool仍然会将密钥库显示为JKS密钥库!

让我们试一下:

%JAVA_HOME%/bin/keytool -genkeypair -alias mykey -keyalg EC -dname "cn=CN, ou=OU, o=O, c=C" -validity 365 -storetype pkcs12 -keystore keystore.pkx -keypass mykeypassword -storepass mystorepassword -v

(translated)
Warning: No support for different keystore and key password for PKCS12 keystores. The value of -keypass will be ignored.
Generating keypair (Type EC, 256 Bit) and self signed certificate (SHA256withECDSA) with a validity of 365 Days
        für: CN=CN, OU=OU, O=O, C=C
[keystore.pkx saved]

现在列出内容:
%JAVA_HOME%/bin/keytool -list -keystore keystore.pkx -storepass mystorepassword

(translated)
Keystore-Type: JKS // ??
Keystore-Provider: SUN

Keystore contains 1 entry

mykey, 25.04.2017, PrivateKeyEntry,
Certificate Fingerprint (SHA1): EA:C2:36:C6:55:69:CB:32:22:C7:14:83:67:47:D2:7E:06:8E:13:14

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接