2014-09-22 13 views
0

부두에서 SPDY를 사용할 때 고객 인증서에 문제가 있습니다.ALPN을 사용하여 부두 SPDY에서 클라이언트 인증서를 사용하는 방법은 무엇입니까?

내가 NPN 작업과 함께 부두 SPDY 서버를 시작할 때 작동하십시오 baseRequest.getHttpChannel()으로

SSLconnector = new HTTPSPDYServerConnector(server, sslContextFactory); 

그것이 org.eclipse.jetty.spdy.server.http.HttpChannelOverSPDY를 사용하고 내가 함께 SSL_SESSION_ID 같은 SSL 특성 및 클라이언트 인증서를 읽을 수있는 코드와 같은 :

// ... HttpServletRequest request 
java.security.cert.X509Certificate client_certs[] = (java.security.cert.X509Certificate[])request.getAttribute("javax.servlet.request.X509Certificate"); 

하지만 NPN은 Java8에서 옵션이 아닙니다 (내 질문은 How to run Jetty with SPDY using ALPN? 참조). 내가 javax.servlet.request.* 관련된 SSL을 얻을 할 때 나는 null있어이 코드

sslContextFactory.setWantClientAuth(w3srv_config.want_client_auth); 
// ... 
HttpConfiguration httpConfig = new HttpConfiguration(); 

SslConnectionFactory ssl = new SslConnectionFactory(sslContextFactory, "alpn"); 
ALPNServerConnectionFactory alpn = new ALPNServerConnectionFactory("spdy/3", "http/1.1"); 
alpn.setDefaultProtocol("http/1.1"); 
HTTPSPDYServerConnectionFactory spdy = new HTTPSPDYServerConnectionFactory(SPDY.V3, httpConfig); 
HttpConnectionFactory http = new HttpConnectionFactory(httpConfig); 

SSLconnector = new ServerConnector(server, new ConnectionFactory[]{ssl, alpn, spdy, http}); 
//... 

: Java8에서 내가 좋아하는 ALPN 프로토콜을 사용해야합니다. baseRequest.getHttpChannel()org.eclipse.jetty.server.HttpConnection$HttpChannelOverHttp입니다.

클라이언트 인증서로 작업하려면 무엇을 변경해야합니까?

답변

1

찾으려는 속성은 위 코드 예제에서 만든 httpConfig 개체에 추가해야하는 Jetty의 SecureRequestCustomizer에 의해 설정됩니다.

NPN 구성이 약간 다르거 나 NPN에서는 사용할 수 있지만 ALPN에서는 사용할 수없는 일부 유틸리티 방법을 사용한다고 생각합니다.

그냥 일 :

HttpConfiguration httpConfig = new HttpConfiguration(); 
httpConfig.addCustomizer(new SecureRequestCustomizer()); 

이 문제를 해결하기에 충분합니다.

+0

일부 프로토콜을 제외하는 것과 같이 비표준적인 것을 만들었지 만 NPN이나 ALPN을 구성하지 않았습니다. 난 그냥 부팅 병을 변경하고 내 질문에 시작 코드를 변경합니다. 어쨌든'httpConfig.addCustomizer()'를 사용하면 도움이되었습니다. 이제 SSL 속성을 볼 수 있습니다. 감사합니다! –