У меня проблема с клиентскими сертификатами, когда я использую 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
.
Что мне нужно изменить для работы с сертификатами клиентов?
Я сделал некоторые нестандартные вещи, такие как исключение некоторых протоколов, но я не настроил NPN или ALPN. Я просто меняю загрузочную банку и меняю код запуска, который в моем вопросе. В любом случае использование 'httpConfig.addCustomizer()' помогло, и теперь я вижу свойства SSL, спасибо! –