2014-09-22 3 views
0

У меня проблема с клиентскими сертификатами, когда я использую SPDY с Jetty.Как работать с клиентскими сертификатами на Jetty SPDY с ALPN?

Это работает, когда я работаю с NPN и запуска сервера Jetty SPDY с:

SSLconnector = new HTTPSPDYServerConnector(server, sslContextFactory); 

Как baseRequest.getHttpChannel() он использует org.eclipse.jetty.spdy.server.http.HttpChannelOverSPDY и я могу прочитать SSL свойства, как SSL_SESSION_ID и сертификаты клиента с кодом, как:

// ... 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?). В Java8 я должен использовать протокол ALPN как:

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}); 
//... 

С помощью этого кода я получил null, когда я хочу, чтобы получить какой-либо SSL, связанные javax.servlet.request.*. Его baseRequest.getHttpChannel() - org.eclipse.jetty.server.HttpConnection$HttpChannelOverHttp.

Что мне нужно изменить для работы с сертификатами клиентов?

ответ

1

javax.servlet.request.* свойства, которые вы ищите, заданы Jetty's SecureRequestCustomizer, которые необходимо добавить к объекту httpConfig, который вы создаете в приведенном выше примере кода.

Я предполагаю, что ваша конфигурация NPN немного отличается или вы используете какой-либо метод утилиты в Jetty, который делает это для вас с NPN, но не с ALPN.

Просто делать:

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

должно быть достаточно, чтобы решить проблему.

+0

Я сделал некоторые нестандартные вещи, такие как исключение некоторых протоколов, но я не настроил NPN или ALPN. Я просто меняю загрузочную банку и меняю код запуска, который в моем вопросе. В любом случае использование 'httpConfig.addCustomizer()' помогло, и теперь я вижу свойства SSL, спасибо! –

Смежные вопросы