Java 兼容性 java 8 & 11



我需要使用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

对于java 11,密钥存储库正常工作。但是如果我尝试用java 8

读取它
(java 8)$ keytool -list -keystore file.p12 
keytool error: java.io.IOException: Invalid keystore format

为什么会发生这种情况?我认为PKCS12是一个标准化的格式,应该是通用的。但由于某些原因,即使在不同的java版本之间,它也不能工作。

我能够通过使用开关-J-Dkeystore.pkcs12.legacy将keytool切换到遗留生成来解决这个问题。

我想更改我的项目以在代码中生成密钥库。比如:

KeyStore ks = KeyStore.getInstance("pkcs12");
ks.load(null, password);
ks.setKeyEntry(keyAlias, keyPair.getPrivate(), password, certChain);
ks.store(output, password);

但是我也遇到过同样的问题。如果我在java 11中生成它,那么java 8无法打开它(在java代码中也不使用keytool)。是否有一种方法可以使KeyStore类生成"兼容"的密钥库?格式吗?或者用其他方法在代码中生成密钥存储库,这样它是兼容的?

如果您使用的是Java 8,那么如下所示

KeyStore ks = KeyStore. getinstance ("JKS");

最新更新