Проверяет ли Java бит cRLSign KeyUsage для сертификатов выдачи CRL? - PullRequest
0 голосов
/ 27 января 2019

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

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

...