Обработка отзыва сертификатов с помощью CRL в Vertx и Java
Я использую Vertx v3.4.1 с vertx-rx-java для запуска моего сервера. Я должен включить проверку подлинности на основе сертификатов (взаимную проверку подлинности), следовательно, пытаюсь обработать проверку отзыва сертификатов на стороне сервера.
Я пытаюсь использовать метод addCrlPath HttpServerOptions. Однако, похоже, он не перезагружает CRL с заданного "пути" или точки распространения CRL сертификата (CDP) даже после истечения срока действия уже загруженного CRL. Я не могу найти API/ документацию о том, как я могу достичь этого программным путем с помощью Vertx.
Я взглянул на реализацию метода getTrustMgrFactory в классе SSLHelper, и у меня сложилось впечатление, что он выберет CRL, предоставленные только при запуске сервера.
Итак, мои запросы:
- Я пропускаю некоторую конфигурацию, которая гарантирует, что последние CRL автоматически загружаются из CDP, когда истекает время загрузки текущих CRL?
- Если не происходит автоматической загрузки с CDP, любая другая конфигурация, которая может перезагрузить CRL по тому же пути, который указан в
addCrlPath
метод? - Если в 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.
}
1 ответ
На момент написания этого запроса опция перезагрузки CRL отсутствовала в Vertx. Согласно обсуждению группы Google Vertx, это потребовало бы некоторого улучшения. Эта функция может быть доступна после внесения соответствующих изменений.