В настоящее время у меня есть следующий фрагмент кода, который принимает любой сертификат SSL (Apache HTTP-клиент 4.5.7):
CloseableHttpClient client;
final SSLConnectionSocketFactory sf = new SSLConnectionSocketFactory(new TLSSocketConnectionFactory(),
new String[]{"TLSv1.2"}, new String[]{}, new AnyHostnameVerifier(logger));
client = HttpClients
.custom()
.setSSLSocketFactory(sf)
.setSSLHostnameVerifier(new AnyHostnameVerifier(logger))
.setSSLContext(new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
@Override
public boolean isTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
return true;
}
}).build())
.build();
return client;
Я хочу создать аналогичный клиент, который будет
- принимает любой сертификат, подписанный государственным органом, и
- отклоняет самозаверяющие сертификаты.
Как я могу это сделать?
Моя попытка сделать это
Насколько я знаю, если я использую хранилище ключей по умолчанию, он автоматически проверит действительность сертификата, подписанного государственным органом.
Так что янаписал это:
final KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
Но метод SSLContextBuilder.loadTrustMaterial
принимает второй аргумент - стратегию доверия.
Вот где я застрял - я понятия не имею, как реализоватьдоверительная стратегия, которая отвечала бы вышеуказанным критериям (принять все сертификаты, подписанные государственным органом, отклонить все самозаверяющие).Должен ли я реализовать это вообще или просто передать null
?