从Jetty 11迁移至Jetty 12:如何获取SSL连接信息?
在Jetty 12中获取SSL会话及客户端证书相关属性
Jetty 12对内部API做了重构,原Jetty 11依赖的非标准请求属性已不再直接提供,需通过以下方式获取你需要的SSL相关信息:
1. 获取SSL协议与加密套件
通过Jetty原生Request实例获取SslConnection,进而拿到SSLSession提取协议和加密套件:
import org.eclipse.jetty.server.Request; import org.eclipse.jetty.io.ssl.SslConnection; import jakarta.servlet.http.HttpServletRequest; // 在Servlet方法中获取Jetty原生Request HttpServletRequest servletRequest = ...; Request jettyRequest = Request.getRequest(servletRequest); // 获取SslConnection并提取SSLSession SslConnection sslConnection = jettyRequest.getConnection().unwrap(SslConnection.class); if (sslConnection != null) { SSLSession sslSession = sslConnection.getSslSession(); String sslProtocol = sslSession.getProtocol(); // 对应ssl_protocol=TLSv1.3 String sslCipher = sslSession.getCipherSuite(); // 对应ssl_cipher=TLS_CHACHA20_POLY1305_SHA256 }
2. 获取客户端证书及相关信息
前提配置
需先在Jetty的SSL连接器中启用客户端认证,否则无法获取客户端证书。示例配置(jetty.xml):
<New id="sslContextFactory" class="org.eclipse.jetty.ssl.SslContextFactory.Server"> <Set name="keyStorePath">你的密钥库路径</Set> <Set name="keyStorePassword">密钥库密码</Set> <!-- 根据业务需求选择:needClientAuth强制要求客户端证书,wantClientAuth可选 --> <Set name="needClientAuth">true</Set> </New>
提取客户端证书信息
标准Servlet属性jakarta.servlet.request.X509Certificate在Jetty 12中仍可使用,用于获取客户端证书数组:
import java.security.cert.X509Certificate; import java.util.Base64; // 获取客户端证书数组 X509Certificate[] clientCerts = (X509Certificate[]) servletRequest.getAttribute("jakarta.servlet.request.X509Certificate"); if (clientCerts != null && clientCerts.length > 0) { X509Certificate clientCert = clientCerts[0]; // 获取客户端DN(对应ssl_client_i_dn=CN=xyz) String sslClientIDN = clientCert.getSubjectX500Principal().getName(); // 转换为PEM格式证书(对应x_ssl_client_cert) String pemCert = "-----BEGIN CERTIFICATE-----\n" + Base64.getEncoder().encodeToString(clientCert.getEncoded()) + "\n-----END CERTIFICATE-----"; }
注意事项
- 若未配置客户端认证,
jakarta.servlet.request.X509Certificate属性会为null; org.eclipse.jetty.server.x509属性仅存储服务器证书,与客户端证书无关;- 所有操作需做空值判断,避免因非SSL请求导致空指针异常。
内容的提问来源于stack exchange,提问作者Michał Niklas
相关产品推荐
相关产品推荐

