Я использую Java-реализацию для проверки отзыва с использованием CRL, который похож на следующий код (я сделал код коротким и понятным)
TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
CertPathBuilder cpb = CertPathBuilder.getInstance("PKIX");
PKIXRevocationChecker rc = (PKIXRevocationChecker)cpb.getRevocationChecker();
rc.setOptions(EnumSet.of(
PKIXRevocationChecker.Option.PREFER_CRLS,
PKIXRevocationChecker.Option.ONLY_END_ENTITY,
PKIXRevocationChecker.Option.NO_FALLBACK,
PKIXRevocationChecker.Option.SOFT_FAIL));
PKIXBuilderParameters pkixParams =
new PKIXBuilderParameters(getTrustStore(), new X509CertSelector());
pkixParams.setRevocationEnabled(false);
pkixParams.addCertPathChecker(rc);
tmf.init(new CertPathTrustManagerParameters(pkixParams));
SSLContext contect = SSLContext.getInstance("TLSv1.2");
context.init(null, getTrustManagers(), null);
defaultFactory = context.getSocketFactory();
Приведенный выше код находится в конструкторе пользовательскогоSSLSocketFactory, и есть собственный TrustManager (возвращаемый getTrustManagers ()), который переопределяет checkServerTrusted () для выполнения нескольких проверок сертификатов и выполняет checkServerTrusted () по умолчанию в конце.Все работает хорошо, за исключением того, что мне нужно, чтобы проверка CRL была неудачной, когда он подписан центром сертификации, у которого не установлен бит использования ключа cRLsign, но это не так.
Я знаю, что это требование RFC3280, и где-то в Интернете я читал, что реализация Java совместима с RFC, и я даже видел методы в базовом коде Java, чтобы сделать это, но, похоже, этоне запускается, когда я запускаю приложение.
Я выполнил всю проверку отзыва с помощью пользовательского кода, чтобы добиться этого, но я думаю, что реализация Java гораздо более полная, чем мой пользовательский код, и я настоятельно предпочитаю использовать Javaреализация.
Любое решение?