我需要使用 java 11 生成一个 java 密钥库,并且能够在 java 8 和 java 11 中使用它。我使用格式 PKCS12。由于某种原因,当我使用 java 11 中的 keytool 生成它时,java 8 中的 keytool 无法打开它。
使用 java 11 生成
(java 11)$ keytool -genkeypair -keyalg RSA -noprompt -alias key -dname "CN=hostname, OU=XX, O=XX, L=YY, S=CZ, C=CZ" -keystore file.p12 -storepass password -keypass password -deststoretype pkcs12
Run Code Online (Sandbox Code Playgroud)
对于 java 11,密钥库运行良好。但如果我尝试使用 java 8 读取它
(java 8)$ keytool -list -keystore file.p12
keytool error: java.io.IOException: Invalid keystore format
Run Code Online (Sandbox Code Playgroud)
为什么会发生这种情况?我认为PKCS12是一种标准化格式,应该是通用的。但由于某种原因,它甚至在 java 版本之间也不起作用。
我能够通过使用 switch 将 keytool 切换到传统生成来解决这个问题-J-Dkeystore.pkcs12.legacy。
我想更改我的项目以在代码中生成密钥库。就像是:
KeyStore ks = KeyStore.getInstance("pkcs12");
ks.load(null, password);
ks.setKeyEntry(keyAlias, keyPair.getPrivate(), password, certChain);
ks.store(output, password);
Run Code Online (Sandbox Code Playgroud)
但我遇到了同样的问题。如果我在java 11中生成它,那么java 8就无法打开它(在java代码中也不使用keytool)。有没有办法让KeyStore类生成“兼容”格式的密钥库?或者任何其他方式在代码中生成密钥库,因此它是兼容的?
| 归档时间: |
|
| 查看次数: |
12848 次 |
| 最近记录: |