Проверка сроков истечения срока действия сертификатов в хранилище java
В моем приложении Java используется файл хранилища ключей, в котором у меня есть сертификат, который используется в ssl-соединении с активным сервером каталогов.
Я должен проверить дату истечения срока действия и пригласить пользователя, если он близок к истечению срока действия. Я должен сделать это, пока мое приложение начнется. Моя идея - использовать внешнюю программу: keytool для отображения информации об определенном сертификате в хранилище ключей, а затем выполнить некоторые операции синтаксического анализа строки, которая выводит keytool, чтобы найти эту дату проверки.
Здесь выводится команда конкретного ключа:
Owner:
Issuer: CN=CPD Root CA, DC=cpd, DC=local<br>
Serial number: 39e8d1610002000000cb
<br>Valid from: Wed Feb 22 21:36:31 CET 2012 until: Thu Feb 21 21:36:31 CET 2013
Certificate fingerprints: <br>
MD5: 82:46:8B:DB:BC:5C:64:21:84:BB:68:E3:4B:D4:35:70<br>
SHA1: 35:52:CA:F2:11:66:1E:50:63:BC:53:A5:50:C1:F0:1E:62:81:BC:3F<br>
Signature algorithm name: SHA1withRSA
Проблема заключалась бы в синтаксическом анализе, поскольку я не могу быть уверенным, в каком формате он отображается.
Есть ли более простой способ проверить дату истечения срока действия сертификатов, включенных в файл java keystore?
Ответы
Ответ 1
Спасибо за направление EJP, вот блок того, что я придумал.
try {
KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
keystore.load(new FileInputStream("keystoreLocation"), "keystorePassword".toCharArray());
Enumeration<String> aliases = keystore.aliases();
while(aliases.hasMoreElements()){
String alias = aliases.nextElement();
if(keystore.getCertificate(alias).getType().equals("X.509")){
System.out.println(alias + " expires " + ((X509Certificate) keystore.getCertificate(alias)).getNotAfter());
}
}
} catch (Exception e) {
e.printStackTrace();
}
Ответ 2
Используйте класс java.security.Keystore для загрузки хранилища ключей и перечисления его содержимого и проверки каждого сертификата на срок.