And*_*ure 8 java spring-security x509 spring-boot
我正在使用Spring Security 使用x.509证书进行身份验证,并且只有在服务器信任库中存在浏览器密钥存储区中配置的客户端证书时,它才有效.
它目前是如何工作的:
问题是,如果我从服务器端信任库中删除客户端证书,Firefox将不再打开此弹出窗口,并且只进行单向SSL连接.即使根CA证书存在于服务器信任库中.
我想要的是:
我也对互联网上的两个资源感兴趣.在Baeldung的本教程中,它说所有客户端证书都必须存储在服务器信任库中,以便X.509 auth工作(这证实了我的经验).
您必须记住,对于应由服务器验证的每个用户,需要在配置的信任库中安装自己的证书.对于只有少数客户端的小型应用程序,这可能是可行的,随着客户端数量的增加,可能会导致用户进行复杂的密钥管理.
但是,@ robinhowlett的这篇教程说明了这一点
客户端将其密钥库中的证书提供给服务器,服务器将使用服务器信任库中的CA证书验证客户端证书的链.
这基本上是我想要实现的目标,但我无法做到.
底线:是否有人设法在服务器信任库中存储一个或多个根CA证书,并使用这些根CA颁发的客户端证书通过Spring Security中的X.509相互SSL握手进行身份验证?
我使用的是Spring Boot 1.5.2.RELEASE(spring-security-web 4.2.2.RELEASE).我已经使用Firefox 53测试了我的SSL身份验证.
我发现了我的问题 - 我正在修改信任存储(删除客户端证书并只留下 CA 证书),而服务器已启动(Tomcat,在我的例子中)。但信任存储区保存在内存中,并且仅在 JVM 初始化时读取一次(有关此 ServerFault 帖子的详细信息)。因此,Tomcat 在运行时不会读取信任存储区的更改。
所以答案很简单:是的,如果信任存储中仅存在 CA 证书,则在 SSL 握手期间,服务器会与浏览器通信,它需要受信任的 CA 颁发的客户端证书,然后浏览器会提示用户选择证书由受信任的 CA 颁发(如果浏览器密钥库中存在此类证书)。
但是,如果在服务器启动并运行时将 CA 动态添加到服务器信任存储中,则不会检测到它。新的 CA 只有在服务器重新启动(并且 JVM 重新初始化)后才会被识别。
| 归档时间: | 
 | 
| 查看次数: | 3336 次 | 
| 最近记录: |