Java 如何在Spring引导下运行的REST控制器中获取与HTTPS请求相关的SSL证书(X.509)?

Java 如何在Spring引导下运行的REST控制器中获取与HTTPS请求相关的SSL证书(X.509)?,java,spring,spring-mvc,ssl,x509certificate,Java,Spring,Spring Mvc,Ssl,X509certificate,我有一个SpringBootREST控制器,它在服务器端和客户端使用相互HTTPS身份验证和密钥库。服务器端具有带有@RequestMapping的控制器类。服务器和客户端之间的HTTPS在其他方面工作正常 有多个客户端在服务器信任存储上配置了不同的匹配项。在控制器主体内部时,我需要知道哪个信任存储条目已用于对当前客户端进行身份验证 我尝试了使用注入的HttpServetRequest方法参数的答案,但是请求参数上没有任何内容。不幸的是,request.getAttributejavax.ser

我有一个SpringBootREST控制器,它在服务器端和客户端使用相互HTTPS身份验证和密钥库。服务器端具有带有@RequestMapping的控制器类。服务器和客户端之间的HTTPS在其他方面工作正常

有多个客户端在服务器信任存储上配置了不同的匹配项。在控制器主体内部时,我需要知道哪个信任存储条目已用于对当前客户端进行身份验证

我尝试了使用注入的HttpServetRequest方法参数的答案,但是请求参数上没有任何内容。不幸的是,request.getAttributejavax.servlet.request.X509Certificate似乎只返回null,即使我确信交互是通过HTTPS进行的。request.getAttributejavax.servlet.request.cipher\u套件返回TLS\u ECDHE\u RSA\u和\u AES\u 128\u CBC\u SHA256

如何使用Spring Rest Controller方法获取有关正在使用哪个证书的任何信息


Spring framework 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连接

是否启用了tomcat的clientAuth并设置了信任库?尝试在客户端或服务器端调试SSL连接,以确保客户端正在提供证书。此注释提供了问题的答案。connector.setAttributeclientAuth,true是缺少的。如果你转换为答案,我接受。确认这解决了问题。