2016-11-10 8 views
1

Я создаю SSLContext стандартным образом:Extract сертификат от SSLContext

  • взять .p12 файл сертификата,
  • создать KeyStore и сертификат нагрузки в него,
  • создать KeyManagerFactory, инициализировать его с KeyStore, и получить KeyManagers,
  • создать TrustManagerFactory, инициализировать его нулевым и получить TrustManagers.
  • Создайте SSLContext и запустите его с помощью KeyManagers и TrustManagers.

Вопрос в том, как я могу извлечь данные из хранилища ключей и сертификатов из SSLContext? Задача заключается в получении хеш-отпечатка от certficate.

Возможно ли это, или я должен получить его отдельно, считая сертификат из файла?

+0

Если вы у вас есть KeyStore, тогда вы можете получить сертификат, подобный этому сертификату cert = keystore.getCertificate (alias); ', но вы должны знать псевдоним (имя) этого сертификата, прежде чем использовать его. И тогда Get Fingerprint также легко «org.apache.commons.codec.binary.Hex.encodeHexString (cert.getFingerprint());' – Krzysiek

ответ

0

Это можно сделать, если у вас есть пользовательский TrustManager. Вы можете обратиться к этому link за этот пользовательский класс. Ищите частный статический класс SavingTrustManager.

И в том месте, где вы используете TrustManager по умолчанию java, используйте этот класс, чтобы вы могли получить сертификат, отправленный сервером.

SSLContext context = SSLContext.getInstance("TLS"); 
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); 
tmf.init(dummyTrustStore); 

X509TrustManager defaultTrustManager = (X509TrustManager) tmf.getTrustManagers()[0]; 

SavingTrustManager savingTrustManager = new SavingTrustManager(defaultTrustManager); 
context.init(null, new TrustManager[] { savingTrustManager }, null); 
SSLSocketFactory factory = context.getSocketFactory(); 

И после того, как вы начали рукопожатия, вы можете получить сертификаты от SavingTrustManager из статической переменной-члена chain, как:

savingTrustManager.chain

+0

Итак, чтобы получить информацию о сертификате, я должен установить соединение? Ну, не то, что я намеревался сделать, но спасибо в любом случае. – Radzikowski

 Смежные вопросы

  • Нет связанных вопросов^_^