Обработка отзыва сертификата с помощью CRL в Vertx и Java

Я использую Vertx v3.4.1 с vertx-rx-java для запуска своего сервера. Я должен включить аутентификацию на основе сертификатов (взаимную аутентификацию), поэтому пытаюсь обработать проверку отзыва сертификата на стороне сервера.

Я пытаюсь использовать метод addCrlPath для HttpServerOptions. Однако похоже, что он не перезагружает CRL из заданного «пути» или точки распространения CRL сертификата (CDP) даже после истечения срока действия уже загруженного CRL. Я не могу найти какой-либо API/документацию о том, как я могу добиться этого программно, используя Vertx.

Я посмотрел на реализацию getTrustMgrFactory в классе SSLHelper, и у меня такое ощущение, что он выберет CRL, предоставляемые только при запуске сервера.

Итак, мои запросы:

  1. Я пропустил некоторую настройку, которая обеспечивает автоматическую загрузку последних CRL с CDP после истечения срока действия загруженных в данный момент CRL?
  2. Любая другая конфигурация, которая может перезагружать CRL с того же пути, который указан в методе addCrlPath, если не загружается автоматически с CDP?
  3. Если в Vertx нет встроенной поддержки для # 1 и # 2, есть ли какой-либо другой API, который обеспечивает такую ​​встроенную поддержку?

В противном случае моим единственным вариантом было бы справиться с этим самостоятельно.

Ниже приведен код, как я инициализирую свой сервер.

import io.vertx.core.http.ClientAuth;
import io.vertx.core.http.HttpServerOptions;
import io.vertx.core.net.PfxOptions;
import io.vertx.rxjava.core.Vertx;
import io.vertx.rxjava.ext.web.Router;
import io.vertx.rxjava.ext.web.RoutingContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class VertxServer {

private static final Logger LOGGER = LoggerFactory.getLogger(VertxServer.class);

private Vertx vertx;

public VertxServer(final Vertx v) {
    this.vertx = v;
}

public void init() {
    vertx.createHttpServer(getHttpServerOptions())
             // getRouter() method handles router configuration.
            .requestHandler(req -> getRouter().accept(req))
            .rxListen()
            .doOnSuccess(server -> LOGGER.info("Started listening to server..."))
            .doOnError(e -> LOGGER.error("Unable to listen. Server launch failed", e))
            .subscribe(
                    server -> LOGGER.info("Server launched successfully. {}", server),
                    e -> LOGGER.error("Server launch failed", e))
    ;
}

private HttpServerOptions getHttpServerOptions() {
    HttpServerOptions options = new HttpServerOptions()
            .setHost("127.0.0.1")
            .setPort(8085);
            .setSsl(true)
            .setPfxKeyCertOptions(
                    new PfxOptions()
                            .setPath("E:\\temp\\certs\\server.pfx")
                            .setPassword("servercertpass".toCharArray())
            )

    setTrustStoreOptions(options);
    return options;
}

private void setTrustStoreOptions(final HttpServerOptions options) {
    PfxOptions pfxOptions = new PfxOptions()
           .setPath("E:\\temp\\certs\\client-cert-root.p12")
           .setPassword("clientcertrootpass".toCharArray());
    options.setPfxTrustOptions(pfxOptions)
           .addCrlPath("E:\\temp\\certs\\crls\\client-certs.crl")
           .setClientAuth(ClientAuth.REQUEST);
}

  // Other methods here, which are not relevant for this question.
}

person ramtech    schedule 22.09.2017    source источник


Ответы (1)


На момент написания этого запроса в Vertx отсутствовала возможность перезагрузки списков отзыва сертификатов. Согласно обсуждению в группе Google Vertx, потребуется некоторое улучшение. Возможно, эта функция станет доступна после внесения соответствующих изменений.

person ramtech    schedule 26.09.2017