2015-11-06 74 views
0

在我的程序中,我需要使用java从包含在pkcs12存档中的密钥对中获取密钥。由于我不知道密钥对别名,我必须遍历密钥库中的所有别名。 问题是,我如何识别密钥对? 我使用这个代码来获得密钥和证书链:识别java密钥库中的条目

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); 

我想,以确定条目密钥对,或只是证书/链

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

回答

1

呼叫KeyStore.isKeyEntry

注意只有可能的Entry是一个PrivateKeyEntry,它包含一个或多个cert的私钥和(匹配)链,或者一个TrustedCertEntry只包含一个证书但不能包含多个证书。 PKCS12格式不支持SecretKeyEntry。

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