2016-05-09 6 views
-1
KeyStore keystore_client = KeyStore.getInstance("pkcs12"); 

try(InputStream keyInput = new FileInputStream("2.pfx")){ 
    keystore_client.load(keyInput, null); 
} 
Enumeration<String> e = keystore_client.aliases(); 
while(e.hasMoreElements()){ 
    String alias = e.nextElement(); 
    if(keystore_client.getCertificate(alias)==null) 
    throw new RuntimeException("Cannot get Certificate"); 
} 

Когда я запускаю этот код, я получаю исключение: «Не могу получить сертификат».Java - Почему я не могу перечислять сертификаты в KeyStore, используя их псевдоним?

Как извлечь сертификаты из файла pkcs12?

Редактировать:
Файл pfx был создан openssl.

$ openssl pkcs12 -export -out 2.pfx -in server.crt -inkey server.key 
$ keytool -list -keystore 2.pfx 
Enter keystore password: 

***************** WARNING WARNING WARNING ***************** 
* The integrity of the information stored in your keystore * 
* has NOT been verified! In order to verify its integrity, * 
* you must provide your keystore password.     * 
***************** WARNING WARNING WARNING ***************** 

Keystore type: JKS 
Keystore provider: SUN 

Your keystore contains 1 entry 

1, May 9, 2016, PrivateKeyEntry, 
+1

Привет @tom, keystore_client.getCertificate (псевдоним) возвращает нуль. –

+0

Вы проверили, какой псевдоним вызывает эту проблему? И это также может означать, что псевдоним существует, но нет сертификата, назначенного ему (более того). – Tom

+0

Привет @Tom, Спасибо за вашу помощь. Я просто добавил информацию о файле pfx. Взгляни, пожалуйста. И псевдоним «1». –

ответ

1

Причина, по которой вы не получаете сертификат, заключается в том, что вы не предоставляете пароль. Присмотритесь на предупреждениях вы получаете:

***************** WARNING WARNING WARNING ***************** 
* The integrity of the information stored in your keystore * 
* has NOT been verified! In order to verify its integrity, * 
* you must provide your keystore password.     * 
***************** WARNING WARNING WARNING ***************** 

Если вы JUnit тестов на коде и попробовать хранилище ключи с паролем и без пароля вы увидите, что только те, которые нужны пароли позволят вам получить сертификаты через этот код, и, конечно, при условии ввода правильного пароля.

Еще одна вещь, которую вы увидите, если вы попытаетесь извлечь это из командной строки:

***************** WARNING WARNING WARNING ***************** 
* The integrity of the information stored in your keystore * 
* has NOT been verified! In order to verify its integrity, * 
* you must provide your keystore password.     * 
***************** WARNING WARNING WARNING ***************** 

keytool error: java.lang.Exception: Alias <1> has no certificate 
+0

Файл pfx не имеет пароля. Поэтому я должен добавить пароль для этого? –

+0

Если вы не разместите его, он не сможет проверить запрос. Попробуйте добавить к нему пароль и посмотреть, что произойдет. Если вы используете команду, чтобы извлечь сертификат, вы увидите, что получите «ошибку keytool: java.lang.Exception: Alias ​​<1> не имеет сертификата ». Попробуйте эту командную строку «keytool -keystore 2.pfx -storetype pkcs12 -exportcert -alias 1 -file server.crt» –