我有一个Spring Boot REST控制器,它使用服务器端和客户端的密钥库进行相互HTTPS身份验证。服务器端具有带有@RequestMapping的控制器类。服务器和客户端之间的HTTPS在其他方面似乎运行良好。
有多个客户端具有不同的匹配项,这些匹配项在服务器信任存储中配置。在控制器主体内部时,我需要知道哪个信任存储条目已用于对当前客户端进行身份验证。
我已经尝试使用注入的HttpServetRequest(方法参数)来回答这个问题,但请求参数上没有任何内容。不幸的是,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.
如注释所述,有必要启用客户端身份验证
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
...
connector.setAttribute("clientAuth", "true")
此外,为了确保客户端提供证书,可以在客户端或服务器端调试SSL连接