使用Vertx和Java中的CRL进行证书吊销处理

时间:2017-09-22 07:29:10

标签: java ssl x509certificate vert.x certificate-revocation

我正在使用Vertx v3.4.1和vertx-rx-java来运行我的服务器。我必须启用基于证书的身份验证(相互身份验证),因此尝试在服务器端处理证书吊销检查。

我正在尝试使用addCrlPath method of HttpServerOptions。但是,看起来,即使已经加载的CRL过期,它也不会从给定的“路径”或证书的CRL分发点(CDP)重新加载CRL。我找不到任何关于如何使用Vertx以编程方式实现它的API /文档。

我查看了getTrustMgrFactory method in SSLHelper class的实现,我感觉它会选择仅在服务器启动时提供的CRL。

所以,我的疑问是:

  1. 我是否遗漏了一些配置,确保在当前加载的CRL过期后,从CDP自动下载最新的CRL?
  2. 如果没有从CDP自动下载,可以从addCrlPath方法中提供的同一路径重新加载CRL的任何其他配置?
  3. 如果Vertx中没有针对#1和#2的内置支持,是否还有其他API提供内置的支持?
  4. 否则我唯一的选择就是自己处理这些。

    以下是我正在初始化服务器的代码

    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 个答案:

答案 0 :(得分:0)

在编写此查询时,Vertx中不存在重新加载CRL的选项。根据{{​​3}},它需要一些改进。在实施相应的更改后,此功能可能可用。