我有一个spring引导客户端应用程序和一个服务器应用程序。我正在实现MTLS客户端认证部分。我有一个自签名的客户端证书,这需要添加到服务器中的自定义信任库中。基本上,我正在寻找一种机制来添加我的自定义信任库在运行时。
我希望默认的信任库和自定义信任库被选中。我使用TomcatServletWebServerFactory实现了这一点,但是我没有任何运气。有人能帮忙吗。我正在寻找一个程序化的解决方案。
我不想更改默认的java信任库。我还是需要那个。
发布于 2022-04-06 21:50:10
因为您不想用自定义的信任库来替换现有的信任库(可以通过使用几个系统属性来运行JVM来实现),所以需要添加一些代码,如果内置或自定义信任器批准了客户机,则需要添加信任对等程序的代码。
为此,您需要创建并安装自己的Trustmanager。参见这里的一个示例:https://community.oracle.com/tech/developers/discussion/1535342/java-ssl-trustmanager
如果checkClientTrusted
和checkServerTrusted
方法不引发异常,则证书被批准。将方法保持为空甚至会关闭任何证书验证--不推荐。
发布于 2022-04-07 05:53:58
为了在Spring客户端应用程序和Spring服务器应用程序之间建立带有客户端证书的SSL连接,需要注意以下几点:
涉及信托商店
在这种情况下,有两个非常不同的信任存储:
在Spring服务器应用程序的上下文中,第一个应用程序与服务器与第二个服务器的连接相关--因此,只有当服务器也充当客户端时--例如,充当代理服务器时。
第二个信任存储与服务器与其客户端之间的连接相关。这是你需要处理的问题。
Tomcat信任商店中的证书
Tomcat使用的信任存储不包含客户端证书。相反,它必须包含已签署客户端证书的证书颁发机构的证书。因此,在使用自签名证书时,需要安装您自己生成的CA证书。
这样做的最大优点是,当您授予对新客户端的访问权限时,不需要更改服务器信任存储。
缺点是,您必须处理证书吊销。CRL (证书吊销列表)也存储在信任存储中。请参见:
合并默认信任存储和自定义信任存储
正如现在应该清楚的那样,这不是一个好主意,它将构成一个主要的安全缺陷,因为它将允许任何在默认信任存储区(可以很容易获得)中由CA签名的证书的客户端连接到服务器。服务器信任存储只能包含用于签署客户端证书的证书!
没有必要将两者合并,因为这是完全独立的信托商店,功能完全不同。
但是,当然,合并信任商店在技术上是可行的。这一切都可以通过关键工具-见下文。
管理信托商店
添加、删除、导出、列出和打印证书和CRL都可以通过作为OpenJDK一部分的Oracle命令行工具"keytool“完成。看见
https://stackoverflow.com/questions/71772975
复制相似问题