具有多个证书的CXF SSL安全的Web服务客户端

4
我有一个Java CXF客户端,连接到一个SSL安全的Web服务并进行双向身份验证。 我已经在客户端上正确配置了我的密钥库和信任库,并且它可以正常工作。
我担心的是我的密钥库只包含一个客户端证书,在CXF配置中无法说“对于这个SSL通信,你将使用这个证书”。 因为我只有一个证书,所以在SSL握手期间选择正确的证书不难。 但是,这个客户端将部署在一个环境中,可能会与多个具有自己证书的客户端一起使用,每个客户端都由同一认证机构签名。当服务器要求使用特定机构签名的客户端证书时,将无法区分一个证书和另一个证书。 在这种情况下,我该如何告诉CXF(或Java)使用正确的证书?
我需要建立与客户端证书一样多的SSL上下文吗? (即拥有N个密钥库,每个密钥库只包含一个证书)。 还是有一种方法(在CXF conf或Java中)可以说“在这个上下文中使用这个证书”?
提前感谢您的帮助。
2个回答

0
所有证书必须指向同一个客户端,否则CA会失职。因此,它们应该都具有相同的subjectX500Principal,例如。那么,为什么需要特定的证书?它们全部识别相同的客户端,因此从身份验证的角度来看,它们是等效的。
现在听起来你想要使用特定的证书进行授权,而不仅仅是通过身份验证建立身份。如果是这样,那么这是错误的方法,是PKI的误用。授权是一个应用程序控制的步骤,一旦你拥有了身份验证的身份:获取对等证书的身份并查找授权数据库以查看该身份是否被允许访问应用程序的这部分。不要试图将cacerts文件用作授权数据库,这不是它的用途。

1
感谢您的回复。我同意您的观点,我必须区分身份验证和授权。身份验证由SSL提供,授权将通过SOAP中的WS-Security和SAML令牌提供。 - reef

0

我不知道这是否适用于您,但我以前使用WSIT进行过动态别名选择(即一个密钥库,多个私钥条目)。请参阅this article以获取更多详细信息。(如果那篇文章不够,请告诉我 - 我可以提供更多细节)


谢谢这个链接。我还不确定它是否符合我的需求,但我一定会查看一下这个证书选择功能。谢谢! - reef
链接已失效 :( 有其他替代方案吗? - MeIr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接