gpt4 book ai didi

java - Spring security x.509 身份验证 - 根据其颁发者证书颁发机构接受证书

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:56:35 27 4
gpt4 key购买 nike

我正在使用 Spring Security 来 authenticate using an x.509 certificate ,并且仅当在浏览器 keystore 中配置的客户端证书存在于服务器信任库中时才有效。

目前的运作方式:

  • 我已将 SSL 客户端身份验证配置为可选(server.ssl.client-auth=want,如 this post)
  • 我已经配置了一个包含所有客户端证书的服务器信任库。如果客户端提供的证书在信任库中,则创建相互 SSL 连接。
  • 当我在服务器端信任库中拥有客户端证书时,Firefox 会打开一个弹出窗口,其中包含我的客户端证书,我可以选择并建立相互 SSL 连接。<
  • 我已将 Spring Security 配置为从客户端证书的 SubjectDN 中提取用户名,并根据 UserDetailsService 检查它.如果为该用户名返回了 UserDetails 对象,则身份验证过程成功完成

问题是,如果我从服务器端信任库中删除客户端证书,Firefox 将不再打开此弹出窗口,并且只会建立单向 SSL 连接。即使根 CA 证书存在于服务器信任库中。

我想要的:

  • 在服务器信任存储中仅存储根证书颁发机构的证书
  • 当客户端出示服务器信任库中根 CA 颁发的证书时允许相互 SSL 连接(即使服务器信任库中不存在客户端证书)

我还对互联网上的两个资源很感兴趣。在 this tutorial在 Baeldung 上,它说所有客户端证书都必须存储在服务器信任库中,X.509 身份验证才能工作(这证实了我的经验)。

You must remember that for each user that should be verified by the server, its own certificate needs to be installed in the configured truststore. For small applications with only a few clients, this may perhaps be practicable, with an increasing number of clients it may lead to complex key-management for users.

然而,this tutorial通过 @ robinhowlett说是

The client will present its certificate in its keystore to the server, and the server will validate the client certificate’s chain using the CA certificate in the server’s truststore.

这基本上是我想要实现的,但我做不到。

底线:是否有人设法在服务器信任库中存储一个或多个根 CA 证书,并使用这些根 CA 颁发的客户端证书在 Spring 中通过 X.509 双向 SSL 握手进行身份验证安全吗?

我正在使用 Spring Boot 1.5.2.RELEASE (spring-security-web 4.2.2.RELEASE)。我已经使用 Firefox 53 测试了我的工作 SSL 身份验证。

最佳答案

我发现了我的问题 - 我正在修改信任库(删除客户端证书并仅保留 CA 证书),而服务器已启动(在我的情况下是 Tomcat)。但是信任库保存在内存中,并且只在 JVM 初始化时读取一次(详情 on this ServerFault post )。因此,Tomcat 不会在运行时读取信任库更改。

所以答案很简单:是的,如果信任库中只有 CA 证书,在 SSL 握手期间,服务器会与浏览器通信,它需要由受信任的 CA 颁发的客户端证书,然后浏览器会提示用户选择由受信任的 CA 颁发的证书(如果浏览器 keystore 中存在此类证书)。

但是,如果在服务器启动并运行时将 CA 动态添加到服务器信任库,则不会检测到它。新的 CA 只有在服务器重启后才能被识别(并且 JVM 被重新初始化)。

关于java - Spring security x.509 身份验证 - 根据其颁发者证书颁发机构接受证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43766304/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com