gpt4 book ai didi

java - 如何使用 ALPN 在 Jetty SPDY 上使用客户端证书?

转载 作者:太空宇宙 更新时间:2023-11-03 14:13:24 24 4
gpt4 key购买 nike

当我将 SPDY 与 Jetty 一起使用时,客户端证书出现问题。

当我使用 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 协议(protocol),例如:

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

使用这段代码,当我想获得任何与 SSL 相关的 javax.servlet.request.* 时,我得到了 null。它的 baseRequest.getHttpChannel()org.eclipse.jetty.server.HttpConnection$HttpChannelOverHttp

我必须更改什么才能使用客户端证书?

最佳答案

您要查找的javax.servlet.request.* 属性由Jetty 的SecureRequestCustomizer 设置,您需要将其添加到httpConfig 您在上面的代码示例中创建的对象。

我猜你的 NPN 配置略有不同,或者你在 Jetty 中使用了一些实用方法,它为你使用 NPN 而不是 ALPN。

只是在做:

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

应该足以解决您的问题。

关于java - 如何使用 ALPN 在 Jetty SPDY 上使用客户端证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25972186/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com