我正在尝试在客户端和服务器之间进行相互SSL调用 . 但是如果服务器没有客户端证书,我希望调用失败 .

这里有更多细节 .

我有一个链接到我的根证书的中间证书 . 这两个是公司提供的,公司的每个人都可以访问它们 . 我将我创建的所有新证书链接到公司中间证书 . 任何开发人员都可以这样做 .

我在Tomcat中运行服务,并且已经为我的Tomcat服务器创建了一个证书,该证书被链接到中间证书 . 在服务器端我的链看起来像

root < - intermediate < - server

我还有一个Java客户端并为它创建了一个客户端证书,将其链接到我的中间证书 . 在客户端,我的链看起来像

root < - intermediate < - client

为了明确地显示可以用证书控制的内容,我决定拆分商店 . 我为服务器创建了一个密钥库和一个信任库,我为客户端创建了一个密钥库和一个信任库 .

在服务器密钥库中,我将我的root,intermediate和服务器密钥对 . 在客户端密钥库中,我放置了root,intermediate和客户端密钥对 .

在服务器信任库中,我放置了我的root,intermediate和客户端的公钥 . 在客户端信任库中,我放置了root,intermediate和服务器的公钥 .

一切都按预期工作 .

现在我进入服务器的信任库并删除客户端的公钥 . 重启我的服务器 . 当客户端调用时,我希望服务器抱怨并关闭连接 . 但是,在这种情况下,服务器似乎没问题 . 即使服务器没有客户端公钥,它也具有客户端链接到的证书 . 所以一切都继续正常 . 即使我从服务器的信任库中删除了中间证书,Mutual SSL也能继续正常工作 .

这不是我想要的 . 我不希望任何有证书链接到公司发行的中间人能够打电话给我的服务器 . 我希望能够通过将客户端的公钥显式添加到我的服务器的信任库来控制访问 .

但是怎么样,我想不出来 . 有任何想法吗?