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

Java 具有多个证书的CXF SSL安全Web服务客户端,java,web-services,ssl,cxf,Java,Web Services,Ssl,Cxf,我有一个JavaCXF客户端,它通过相互身份验证连接到SSL安全的Web服务。 我已经在客户端正确配置了密钥库和信任库,并且运行良好 我在这里担心的是,我的密钥库只包含一个客户端证书,在CXF配置中,不可能说“对于此SSL通信,您将使用此证书”。 因为我只有一个证书,所以在进行SSL握手时为CXF选择一个好的证书并不困难。 但是,该客户端将部署在一个环境中,在该环境中,它将与多个可能拥有自己证书的客户端一起使用,并且每个客户端都将由相同的证书颁发机构签名。当服务器请求由特定机构签署的客户端证书时

我有一个JavaCXF客户端,它通过相互身份验证连接到SSL安全的Web服务。 我已经在客户端正确配置了密钥库和信任库,并且运行良好

我在这里担心的是,我的密钥库只包含一个客户端证书,在CXF配置中,不可能说“对于此SSL通信,您将使用此证书”。
因为我只有一个证书,所以在进行SSL握手时为CXF选择一个好的证书并不困难。 但是,该客户端将部署在一个环境中,在该环境中,它将与多个可能拥有自己证书的客户端一起使用,并且每个客户端都将由相同的证书颁发机构签名。当服务器请求由特定机构签署的客户端证书时,将无法区分一个证书和另一个证书。
如何告诉CXF(或Java)在此上下文中使用正确的证书

我是否需要构建与客户端证书一样多的SSL上下文?(即,有N个密钥库,每个密钥库只包含一个证书)。 或者(在CXF conf或Java中)有没有一种方式可以说“在这个上下文中使用这个证书”


提前感谢您的帮助。

所有证书必须指向同一客户机,否则CA将被取消其职责。因此,它们都应该具有相同的SubjectX500主体。那么为什么你需要一个特定的证书呢?它们都标识相同的客户机,因此从身份验证的角度来看,它们都是等效的


听起来好像您想将特定证书用于授权目的,而不仅仅是通过身份验证建立身份。如果是这样的话,那就是错误的做法,滥用PKI。一旦您拥有经过身份验证的身份,授权是应用程序控制的一个步骤:获取对等证书的身份,并查找您的授权数据库,查看是否允许该身份访问应用程序的这一部分。不要尝试将cacerts文件用作授权数据库,这不是它的用途。

我不知道这是否适合您,但我以前使用WSIT进行过动态别名选择(即一个密钥库,多个私钥条目)。有关更多详细信息,请参阅。(如果那篇文章不够,请告诉我,如果你需要,我可以发布更多细节)

谢谢你的回复。我同意你的看法,我必须区分身份验证和授权。身份验证由SSL提供,授权将由SOAP中的WS-Security和SAML令牌提供。感谢此链接。我还不知道这是否适合我的需要,我会看看这个证书的选择功能。谢谢林克死了:(还有其他选择吗?