У меня есть сертификат X509 (java.security.cert.X509Certificate), и мне нужно его проверить. Доверенный якорь уже находится в системном хранилище сертификатов по умолчанию (jre \ lib \ security \ cacerts), но при необходимости я мог бы добавить его во что-нибудь еще. Сертификат не является сертификатом SSL.
Моя первая идея заключалась в использовании диспетчера доверия Java, поскольку я уже использую HTTP с сертификатами сервера, выпущенными тем же центром сертификации. Но похоже, что это можно использовать только для сертификатов SSL, поскольку он предоставляет только checkServerTrusted и checkClientTrusted. Для полноты картины это моя попытка:
X509TrustManager x509TrustManager=null;
trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init((KeyStore)null);
for (TrustManager trustManager : trustManagerFactory.getTrustManagers())
{
if (trustManager instanceof X509TrustManager)
{
x509TrustManager = (X509TrustManager)trustManager;
}
}
java.security.cert.X509Certificate x509 = .... get certificate ...
x509TrustManager.checkServerTrusted(new java.security.cert.X509Certificate[]{x509}, "RSA");
Это делает все, что мне нужно, но, кроме того, он проверяет, действителен ли сертификат для SSL-сервера (или клиента, если я использую checkClientTrusted), и это, очевидно, не работает.
Есть ли простой способ указать использование сертификата и / или ключа для диспетчера доверия или, по крайней мере, способ отключить проверку (я могу это сделать сам).
В будущем я хотел бы использовать список OCSP или CRL для проверки фактического состояния сертификата.