Java - Почему я не могу перечислить сертификаты в хранилище ключей, используя их псевдоним?

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

Когда я запускаю этот код, я всегда получаю исключение: "Не удается получить сертификат".

Как я могу извлечь сертификаты из файла 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 ответ

Решение

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

*****************  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
Другие вопросы по тегам