如何在 Spring 引导下的 REST 控制器 运行 中获取与 HTTPS 请求相关的 SSL 证书 (X.509)?
How to get SSL certificate (X.509) relevant to HTTPS request in REST controller running under Spring boot?
我有 Spring 引导 REST 控制器,它在服务器端和客户端上使用带有密钥库的相互 HTTPS 身份验证。服务器端有带有@RequestMapping 的控制器class。服务器和客户端之间的 HTTPS 似乎工作正常。
有多个客户端在服务器信任库上配置了不同的匹配条目。在控制器体内时,我需要知道哪个信任库条目已用于对当前客户端进行身份验证。
我尝试使用注入的 HttpServetRequest(方法参数)回答 this question,但请求参数上没有任何内容。不幸的是,似乎 request.getAttribute("javax.servlet.request.X509Certificate")
只是 returns null,即使我确定交互是通过 HTTPS 进行的。 request.getAttribute("javax.servlet.request.cipher_suite")
returns TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256.
如何使用 Spring Rest Controller 方法获取有关正在使用哪个证书的任何信息?
Spring 框架 4.3.11.RELEASE,嵌入式 Tomcat 8.0.23,Spring 启动 1.5.1.RELEASE.
如评论所述,需要开启客户端认证
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
...
connector.setAttribute("clientAuth", "true")
此外,为确保客户端提供证书,可以在客户端或服务器端调试 SSL 连接
我有 Spring 引导 REST 控制器,它在服务器端和客户端上使用带有密钥库的相互 HTTPS 身份验证。服务器端有带有@RequestMapping 的控制器class。服务器和客户端之间的 HTTPS 似乎工作正常。
有多个客户端在服务器信任库上配置了不同的匹配条目。在控制器体内时,我需要知道哪个信任库条目已用于对当前客户端进行身份验证。
我尝试使用注入的 HttpServetRequest(方法参数)回答 this question,但请求参数上没有任何内容。不幸的是,似乎 request.getAttribute("javax.servlet.request.X509Certificate")
只是 returns null,即使我确定交互是通过 HTTPS 进行的。 request.getAttribute("javax.servlet.request.cipher_suite")
returns TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256.
如何使用 Spring Rest Controller 方法获取有关正在使用哪个证书的任何信息?
Spring 框架 4.3.11.RELEASE,嵌入式 Tomcat 8.0.23,Spring 启动 1.5.1.RELEASE.
如评论所述,需要开启客户端认证
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
...
connector.setAttribute("clientAuth", "true")
此外,为确保客户端提供证书,可以在客户端或服务器端调试 SSL 连接