Java Spring security x.509身份验证-根据证书颁发机构接受证书
我使用的是Spring Security,它仅在浏览器密钥存储中配置的客户端证书存在于服务器信任存储中时才起作用 目前的工作方式:Java Spring security x.509身份验证-根据证书颁发机构接受证书,java,spring-boot,spring-security,x509,Java,Spring Boot,Spring Security,X509,我使用的是Spring Security,它仅在浏览器密钥存储中配置的客户端证书存在于服务器信任存储中时才起作用 目前的工作方式: 我已将SSL客户端身份验证配置为可选(server.SSL.client auth=want,如中所示) 我已配置包含所有客户端证书的服务器信任存储。如果客户端提供的证书位于信任存储中,则会创建相互SSL连接 当我的客户端证书出现在服务器端信任存储中时,Firefox会打开一个带有我的客户端证书的弹出窗口,我可以选择这些证书并建立相互SSL连接 我已经将Sprin
- 我已将SSL客户端身份验证配置为可选(server.SSL.client auth=want,如中所示)
- 我已配置包含所有客户端证书的服务器信任存储。如果客户端提供的证书位于信任存储中,则会创建相互SSL连接
- 当我的客户端证书出现在服务器端信任存储中时,Firefox会打开一个带有我的客户端证书的弹出窗口,我可以选择这些证书并建立相互SSL连接
- 我已经将Spring安全性配置为从客户机证书的SubjectDN中提取用户名,并根据密码进行检查。如果为该用户名返回UserDetails对象,则验证过程将成功完成
- 仅在服务器信任存储区中存储根证书颁发机构的证书
- 当客户端在服务器信任存储中提供根CA颁发的证书时,允许相互SSL连接(即使客户端证书不在服务器信任存储中)
我使用的是SpringBoot 1.5.2.RELEASE(SpringSecurityWeb4.2.2.RELEASE)。我已经用Firefox 53测试了我的SSL身份验证工作。我发现了我的问题-我在服务器启动时修改了信任存储(删除客户端证书,只留下CA证书)(在我的例子中是Tomcat)。但是信任存储保存在内存中,在JVM初始化时只读取一次(详细信息)。因此,Tomcat不会在运行时读取信任存储更改 因此答案很简单:是的,如果信任存储中只存在CA证书,则在SSL握手期间,服务器会与浏览器通信,它希望客户端证书由受信任的CA颁发,然后浏览器会提示用户选择由受信任的CA颁发的证书(如果浏览器密钥库中存在此类证书)
但是,如果在服务器启动和运行时将CA动态添加到服务器信任存储中,则不会检测到该CA。新CA只有在服务器重新启动(JVM重新初始化)后才会被识别。@dur-谢谢,我找到了启用调试的指南,并将尝试调试上面评论中描述的奇怪之处,然后回来发现问题-JVM初始化时,信任存储区只被读取一次。当服务器已经启动并且旧版本在内存中时,我正在修改信任存储。重新启动服务器工作正常。详细说明如何将CA添加到truststore?您是如何管理它的工作的?我的springboot应用程序在truststore中包含自签名根CA,但允许客户端请求密钥由另一根CA签名。这些请求应被拒绝。。。