Spring Boot - 从HTTP请求中读取x509客户端证书

5
如何从客户端接收 x509 证书?我使用嵌入式 Tomcat 的 Java Spring Boot 框架进行原型设计。在配置 Java SE 进行原型设计时,我执行了以下操作:

HttpsExchange httpsExchange = (HttpsExchange) httpReq;

name = httpsExchange.getSSLSession().getPeerPrincipal().getName();

一个用户给了我一个参考,可在下面找到该信息。
@RequestMapping(value = "/grab")
public void grabCert(HttpServletRequest servletRequest) {
    Certificate[] certs = 
            (Certificate[]) servletRequest.getAttribute("javax.servlet.request.X509Certificate");
}

但是我无法获取一些证书!可能是因为我正在使用Tomcat,它正在处理所有SSL连接,所以我的应用程序没有接收到任何证书。我该怎么做才能获得客户端证书?客户端证书用于获取HTTPS连接。我需要从证书的主题中获取一些信息。谢谢。


这个回答解决了你的问题吗?如何将证书放入X509过滤器(Spring Security)中? - dur
2个回答

8
你需要从HttpServletRequest中获取它。
你可以查看这个问题的答案:如何将证书放入X509过滤器(Spring Security)中?

No you can't get it that way. You need to grab it from the HttpServletRequest:

X509Certificate[] certs = (X509Certificate[])HttpServletRequest.getAttribute("javax.servlet.request.X509Certificate");
这是我试图指向你的Gandalf撰写的帖子。
这是原始问题

1
当您升级到Spring Boot 3.x时,servlet请求属性已被重命名以与重命名的javaxjakarta包保持一致。现在是这样的:
request.getAttribute("jakarta.servlet.request.X509Certificate")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接