gpt4 book ai didi

java - 如何在 jetty 服务器的服务器端列出客户端证书

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

我已经设置了一个 Jetty 服务器,其中 ssl 上下文更新了 key 和信任库,但是,任何拥有服务器信任的有效证书的客户端都能够与服务器建立 TLS 连接。

但是我需要知道所有可能的可信客户端中的哪个客户端当前正在发出请求;换句话说,我需要知道此连接中使用的客户端证书,特别是在处理程序中。有谁知道如何访问此证书或者是否有可能?

我想对证书执行一些自定义检查,以根据证书中提供给服务器的某些字段进一步过滤掉客户端?

PS:我确实尝试上网查看并进行了一些研究,但似乎没有任何效果。

最佳答案

首先将 SecureRequestCustomizer 添加到 ServerConnector 正在使用的 HttpConfiguration

这又会添加几个请求属性,您可以使用这些属性访问连接和请求/响应交换中存在的安全信息。

示例(来自 LikeJettyXml.java ):

    // === jetty-http.xml ===
ServerConnector http = new ServerConnector(server,
new HttpConnectionFactory(http_config));
http.setPort(8080);
http.setIdleTimeout(30000);
server.addConnector(http);


// === jetty-https.xml ===
// SSL Context Factory
SslContextFactory sslContextFactory = new SslContextFactory();
sslContextFactory.setKeyStorePath("config/etc/keystore");
sslContextFactory.setKeyStorePassword(...);
sslContextFactory.setKeyManagerPassword(...);
sslContextFactory.setTrustStorePath("config/etc/keystore");
sslContextFactory.setTrustStorePassword(..);

// SSL HTTP Configuration
HttpConfiguration https_config = new HttpConfiguration(http_config);
https_config.addCustomizer(new SecureRequestCustomizer()); // <-- the magic line

// SSL Connector
ServerConnector sslConnector = new ServerConnector(server,
new SslConnectionFactory(sslContextFactory,HttpVersion.HTTP_1_1.asString()),
new HttpConnectionFactory(https_config));
sslConnector.setPort(8443);
server.addConnector(sslConnector);

一旦就绪,当您处理请求时,您可以访问请求属性...

  • request.getAttribute("javax.servlet.request.X509Certificate") - 连接中使用的 java.security.cert.X509Certificate 数组
  • request.getAttribute("javax.servlet.request.cipher_suite") - 协商的密码套件的名称(字符串类型)
  • request.getAttribute("javax.servlet.request.key_size") - key 大小(整数类型)
  • request.getAttribute("javax.servlet.request.ssl_session_id") - SSL session ID(字符串类型)
  • request.getAttribute("org.eclipse.jetty.servlet.request.ssl_session") - 连接使用的 Activity javax.net.ssl.SSLSession .

您应该能够从这些信息来源之一获得您需要的信息。 (请不要更改这些属性的任何值,否则会出现各种奇怪的行为)

关于java - 如何在 jetty 服务器的服务器端列出客户端证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52191777/

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