小编And*_*ure的帖子

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

我正在使用Spring Security 使用x.509证书进行身份验证,并且只有在服务器信任库中存在浏览器密钥存储区中配置的客户端证书时,它才有效.

它目前是如何工作的:

  • 我已将SSL客户端身份验证配置为可选(server.ssl.client-auth = want,就像在这篇文章中一样)
  • 我已配置包含所有客户端证书的服务器信任库.如果客户端提供的证书位于信任库中,则会创建相互SSL连接.
  • 当我在服务器端信任库中存在客户端证书时,Firefox会打开一个带有我的客户端证书的弹出窗口,我可以选择该证书并建立相互SSL连接.
  • 我已将Spring Security配置为从客户端证书的SubjectDN中提取用户名,并针对UserDetailsS​​ervice进行检查.如果为该用户名返回UserDetails对象,则身份验证过程将成功完成

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

我想要的是:

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

我也对互联网上的两个资源感兴趣.在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身份验证.

java spring-security x509 spring-boot

8
推荐指数
1
解决办法
3336
查看次数

如何在Spring Boot中使用多个数据源时设置多个连接池?

我有一个连接到两个独立数据库的Spring Boot应用程序.一切正常(我按照文档中的步骤和教程),虽然为了自定义Tomcat JDBC连接池设置,我不得不手动配置它(因为通过定义多个数据源,引导自动配置被忽略,和Spring Boot不再从application.properties读取特定于tomcat的属性.

当我在配置两个DataSource期间使用调试器时,我看到org.apache.tomcat.jdbc.pool.DataSource实例在DataSource.PoolProperties ["name"]条目中具有相同的连接池.请参阅下面的调试器屏幕截图,每个dataSource()方法都在单独的配置类中配置.请注意,定义了相同的连接池. 主DataSource CP配置 辅助数据源CP配置

然而,从我看到使用JConsole + tomcat的JMX什么,只有一个连接池,其中有主数据库配置的详细信息(URL,证书,见下文). jConsole检查有关连接池的Tomcat JDBC JMX信息

由于Spring内部有多层抽象,我很难调试它.我有Eclipse Class Decompiler插件,我通常用它来查看Spring逻辑,但在这种情况下,数据源的初始化代码在bean注册时发生,而不是在Spring Boot实际使用它们来设置数据时消息来源.

最重要的是,你能帮我理解一下:

  1. 为什么只有一个连接池
  2. 如何使用两个连接池,每个数据源一个
  3. 在Spring代码中查看有关其工作原理的更多详细信息

对于第二个问题,有一个相关的问题,但没有答案.还有一个问题是误报,另一个与Spring有关,而不是Spring Boot,所以请不要将此报告为dupe.

java spring tomcat spring-data-jpa spring-boot

6
推荐指数
2
解决办法
4988
查看次数