2017-09-22 12 views
0

vertx-rx-java에서 Vertex v3.4.1을 사용하여 서버를 실행하고 있습니다. 인증서 기반 인증 (상호 인증)을 사용하도록 설정해야하므로 서버 측에서 인증서 해지 확인을 처리하려고합니다.Vertx 및 Java에서 CRL을 사용한 인증서 해지 처리

addCrlPath method of HttpServerOptions을 사용하려고합니다. 그러나 이미로드 된 CRL이 만료 된 후에도 주어진 '경로'또는 인증서의 CRL 배포 지점 (CDP)에서 CRL을 다시로드하지 않는 것처럼 보입니다. Vertex를 사용하여 프로그래밍 방식으로 구현할 수있는 API/문서를 찾을 수 없습니다.

getTrustMgrFactory method in SSLHelper class의 구현을 살펴 보았습니다. 서버 실행에서만 제공되는 CRL을 선택한다는 느낌이 들었습니다.

그래서, 내 쿼리는 다음과 같습니다

  1. 나는, 현재로드 된 CRL을 한 번 만료 자동 CDP에서 다운로드 한 최신 CRL을 보장 몇 가지 구성 실종?
  2. CDP에서 자동으로 다운로드하지 않으면 addCrlPath 방법으로 제공되는 동일한 경로에서 CRL을 다시로드 할 수있는 다른 구성을 사용합니까?
  3. # 1 및 # 2의 Vertx에 내장 된 지원이없는 경우 내장 된 이러한 지원을 제공하는 다른 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. 
} 

답변

0

를 초기화하고있어 어떻게 코드, CRL을 다시로드 할 수있는 옵션은 Vertx에 존재하지 않았다. Vertx google group discussion에 따라 약간의 개선이 필요할 것입니다. 이 기능은 해당 변경 사항이 구현 된 후에 사용 가능할 수 있습니다.