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