4

我将 Jetty 服务器嵌入到我的应用程序中。在我的应用程序中,我可以读取通过读取javax.servlet.request.cipher_suite请求属性协商的密码套件。现在我想检查我的客户是否使用 TLSv1.0、TLSv.1.1 或 TLSv.1.2。如果我启用 SSL 调试,我可以在控制台上看到它:

qtp2819825-43, WRITE: TLSv1.2 Application Data, length = 8038

但我怎样才能在我的handler()?

我同时研究了org.eclipse.jetty.server.Requestjavax.servlet.http.HttpServletRequest。有getProtocol()方法,但它返回HTTP/1.1

4

2 回答 2

1

这个问题有一段时间是开放的,但由于现在有答案,它可能与其他人有关。

您可以通过SecureRequestCustomizer在其 HttpConfiguration 中添加一个来配置您的 ServerConnector。可以在StackOverflow上找到一个示例,但还有更多示例

设置此定制器时,信息作为属性添加,您可以从 HttpServletRequest 中检索。完整的 SSLSession 是作为“错误报告”的结果添加的,并且至少适用于 >= 9.3 的版本。默认属性名称是org.eclipse.jetty.servlet.request.ssl_session,但您可以通过调用在配置中自行设置setSslSessionAttribute("your.attribute.name")

于 2017-09-07T20:17:11.553 回答
0

从 Jetty 9.3 我可以通过以下方式阅读 TLS 版本:

    SSLSession sslSession = (SSLSession)request.getAttribute("org.eclipse.jetty.servlet.request.ssl_session");
    if (sslSession == null)
        env.set("SSL_PROTOCOL_VERSION", "NULL");
    else
        env.set("SSL_PROTOCOL_VERSION", sslSession.getProtocol());
于 2018-09-21T07:11:11.570 回答