识别 java 密钥库中的条目

Identifying entries in java keystore

在我的程序中,我需要使用 java 从包含在 pkcs12 存档中的密钥对中获取密钥。因为我不知道密钥对别名,所以我必须遍历密钥库中的所有别名。 问题是,我如何识别密钥对? 我正在使用此代码获取密钥和证书链:

KeyStore ks = KeyStore.getInstance("pkcs12");
ks.load(new FileInputStream(new File(p12Path)), p12Password);
Enumeration aliases = ks.aliases();
String alias = (String) aliases.nextElement();
p12Key = ks.getKey(alias, p12Password);
p12Chain = ks.getCertificateChain(alias);

我想将条目标识为密钥对或只是 certificate/chain

Entry entry = kspkcs12.getEntry(alias, null);

致电KeyStore.isKeyEntry

请注意,唯一可能的条目是包含一个或多个证书的私钥和(匹配)链的 PrivateKeyEntry,或者仅包含一个但不超过一个的 TrustedCertEntry。 PKCS12 格式不支持 SecretKeyEntry。

实际上,由 除 Java 之外的任何东西创建的 PKCS12 文件通常只有一个 PrivateKeyEntry,没有其他任何东西,但不能保证。