0

SPDY を Jetty で使用すると、クライアント証明書に問題が発生します。

NPNで作業し、Jetty SPDYサーバーを次のように起動すると機能します。

SSLconnector = new HTTPSPDYServerConnector(server, sslContextFactory);

baseRequest.getHttpChannel()それが使用するので、次のようなSSLプロパティとクライアント証明書を次のようなコードでorg.eclipse.jetty.spdy.server.http.HttpChannelOverSPDY読み取ることができます: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関連の.xmlを取得したいときに取得しましたjavax.servlet.request.*。それbaseRequest.getHttpChannel()org.eclipse.jetty.server.HttpConnection$HttpChannelOverHttpです。

クライアント証明書を使用するには何を変更する必要がありますか?

4

1 に答える 1

1

javax.servlet.request.*探しているプロパティは、上記のコード例で作成したオブジェクトに追加する必要がある Jetty の によって設定されますSecureRequestCustomizerhttpConfig

あなたの NPN 構成がわずかに異なっているか、ALPN ではなく NPN でこれを行う Jetty のユーティリティ メソッドを使用していると思います。

ただやっている:

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

問題を解決するには十分なはずです。

于 2014-09-22T11:59:09.333 に答える