我将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.Request
和javax.servlet.http.HttpServletRequest
。有getProtocol()
方法,但它返回HTTP/1.1
。
答案 0 :(得分:1)
这个问题暂时开放,但由于现在有答案,可能与其他人有关。
您可以通过向其HttpConfiguration添加SecureRequestCustomizer
来配置ServerConnector。可以在StackOverflow找到一个示例,但还有更多out there。
设置此自定义程序时,信息作为属性添加,您可以从HttpServletRequest中检索。完整的SSLSession作为"bugreport"的结果添加,并且至少可以使用版本> = 9.3。默认属性名称为org.eclipse.jetty.servlet.request.ssl_session
,但您可以通过调用setSslSessionAttribute("your.attribute.name")
答案 1 :(得分: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());