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



我有一个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连接

相关内容

最新更新