Проверяет ли Java бит cRLSign KeyUsage для сертификатов выдачи CRL?

Я использую реализацию 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.

Любое решение?

0 ответов

Другие вопросы по тегам