Похоже, что эти опции должны быть установлены до того, как будет выполнен первый запрос.
Поэтому следующий код в качестве отдельной Java-программы выдает CertPathValidatorException: Certificate has been revoked
(протестировано с использованием OpenJDK 11.0.2 x64 в Windows):
public static void main(String[] args) {
validateOnCertificateRevocation(true); // throws CertPathValidatorException
}
Однако следующий код не вызывает никаких ошибок / исключений:
public static void main(String[] args) {
validateOnCertificateRevocation(false);
validateOnCertificateRevocation(true); // nothing happens
}
Вы видите, что изменение параметров после обработки первого запроса неэффективно. Я предполагаю, что эти параметры обрабатываются в блоке static { ... }
некоторого класса, связанного с проверкой сертификата.
Если вы все еще хотите включить / отключить проверку отзыва сертификатов для каждого запроса, вы можете сделать это, внедрив свой собственный X509TrustManager
, который использует CertPathValidator
(для который вы можете включить / отключить проверку отзыва сертификатов через PKIXParameters.setRevocationEnabled(boolean)
.
В качестве альтернативы существует решение для глобальной проверки проверки отзыва сертификатов и явной обработки исключения CertificateRevokedException:
private boolean checkOnCertificateRevocation;
@Override
public void checkServerTrusted(X509Certificate[] certs, String authType) throws CertificateException {
try {
getDefaultTrustManager().checkServerTrusted(certs, authType);
} catch (CertificateException e) {
if (checkOnCertificateRevocation) {
if (getRootCause(e) instanceof CertificateRevokedException) {
throw e;
}
}
}
}