当前位置: 首页 > 知识库问答 >
问题:

JBoss到Spring Boot和Spring Security升级:X509身份验证问题

洪育
2023-03-14

升级自:JBoss EAP 6.4/Spring Security 4.2.1(XML配置)

升级至:Spring Boot 2.2.4/Spring Security 5.2.1(JavaConfig)

我们有一个受Spring Security保护的RESTendpoint,它使用X509身份验证和一个测试客户端。

我在Spring Security的过滤器链中的X509AuthenticationFilter处设置了一个断点。extractClientCertificate

X509Certificate[] certs = (X509Certificate[]) request
        .getAttribute("javax.servlet.request.X509Certificate");

在进入Spring Boot和Spring Security 5.2 JavaConfig之后,我再也看不到X509证书出现在请求中。

没有发布源代码,因为我不希望任何人修复我的问题。。。我只是在寻找一些关于在哪里挖掘或探索可能路径的建议。一些想法。。。

  1. Spring Boot中的Spring Security是否使用嵌入式Tomcat连接器?如果我有一个用于HTTPS的Tomcat连接器,并且客户机在HTTPS上点击我们,我是否需要告诉用于HTTPS的Tomcat连接器从请求中提取X509证书

共有1个答案

刘阳舒
2023-03-14

如果有人遇到这个...我解决了这个问题,如果对别人有帮助,我很乐意回答问题。

事实证明,这不是Spring Security性的问题,而是我们如何配置Tomcat连接器的问题。

我们需要:

>

  • 使用下面与org.apache.coyote.http11兼容的方法调用,正确设置Spring Boot Tomcat安全连接器的信任库。

    此外(这是必不可少的)-setClientAuth为true。

    很难看,我挖掘了Tomcat-embed-core的源代码,但是有一系列字符串相当于“强制客户端将证书作为请求的一部分发送”。那些字符串是:“true”,“yes”,“必需”,它们都做同样的事情,所以我们只是使用了“true”。

        protocol.setTruststoreFile(truststorePath); // local directory path
        protocol.setTruststoreType(truststoreType); // a string of either PKCS12 or JKS
        protocol.setTruststorePass(truststorePass); // whatever password you set on your Keystore
        protocol.setClientAuth("true"); // Makes the client provide cert in Request over HTTPS
    

    Tomcat连接器没有很好的文档记录。有一个方法调用:

    protocol.setSSLCACertificateFile(trustStorePath);
    

    这在org下不起任何作用。阿帕奇。郊狼。http11。HTTP11NIO协议

    显然,这是为了与org合作。阿帕奇。郊狼。http11。HTTP11APR协议(Apache便携式运行时)。事实上,这并不是我们建立信任商店的方法。

  •  类似资料:
    • 问题内容: 这是我的情况: 一个Web应用程序对许多应用程序执行某种SSO 登录的用户,而不是单击链接,该应用就会向正确的应用发布包含用户信息(名称,pwd [无用],角色)的帖子 我正在其中一个应用程序上实现SpringSecurity以从其功能中受益(会话中的权限,其类提供的方法等) 因此,我需要开发一个 自定义过滤器 -我猜想-能够从请求中检索用户信息,通过自定义 DetailsUserSe

    • 我们使用kerberos身份验证来执行SSO。早些时候,我们的产品在JRE 6 Update 22上运行,一切正常。我们最近迁移到JRE 6 update 45,kerberos身份验证失败。 因此,代码基本上执行两个步骤——连接和登录1。“连接”步骤测试SPN名称和凭据(密码或密钥表)是否可以登录到由领域和KDC信息标识的域控制器。2.“登录”步骤执行相同的操作,然后还尝试使用GSSAPI身份验

    • 我有一个遗留应用程序,我正在将它从用户密码转换为使用基于证书的身份验证。我使用的是Tomcat7,我的应用程序需要根据用户试图访问的应用程序中的URL支持4种类型的安全性 例如:少数servlet将使用HTTP少数servlet将使用HTTPS而不进行任何身份验证少数servlet将使用PKI进行相互身份验证,但是用户不会被预先知道,因此任何在证书链中拥有有效证书的用户都将被授予访问权限。应用程序

    • 我正在使用SpringBoot开发具有微服务架构的Rest Backend。为了保护endpoint,我使用了JWT令牌机制。我正在使用Zuul API网关。 如果请求需要权限(来自JWT的角色),它将被转发到正确的微服务。Zuul api网关的“WebSecurityConfigrerAdapter”如下。 这样,我必须在这个类中编写每个请求授权部分。因此,我希望使用方法级安全性,即“Enabl

    • 问题内容: 确保GWT + Tomcat应用程序执行身份验证和授权的最佳策略是什么? 问题答案: 有两种基本策略: 确保入口点; 保护远程服务。 最简单的方法是使用常规的Web应用程序安全工具来限制对GWT生成的html / js文件的访问: 春季安全; web.xml约束。 这样可以让您拥有eg 和。 保护远程服务 如果上述解决方案还不够,您可以进行更深入的研究。我已经通过Spring Secu

    • 问题内容: 我试图让我的自定义Java应用程序使用我们的Active Directory服务器进行身份验证,但由于某种原因我无法使其正常工作。谁能看到为什么呢?这是我的方法如下: 结果: 问题答案: 你尝试过这种方式吗? 也更换 与