我有一个Java CXF客户端,它通过相互身份验证连接到SSL安全Web服务。 我在客户端正确配置了我的密钥库和我的信任库,它运行正常。
我担心的是,我的密钥库只包含一个客户端证书,而且在CXF配置中,无法说“这个SSL通信正常,您将使用此证书”。
因为我只有一个证书,所以选择CXF durign SSL握手的好证书并不困难。
但是,此客户端将部署在一个环境中,在该环境中,它将与具有自己的证书的多个可能客户端一起使用,并且每个客户端将由相同的证书颁发机构签名。当服务器要求获得由特定机构签名的客户端证书时,将无法区分一个证书与另一个证书。
如何告诉CXF(或Java)在此上下文中使用适当的证书?
我是否需要构建与客户端证书一样多的SSL上下文? (即,具有N个密钥库,每个密钥库仅包含一个证书)。 或者有没有办法(在CXF conf或Java中)说“在此上下文中使用此证书”?
提前感谢您的帮助。
答案 0 :(得分:0)
所有证书必须引用同一客户,否则CA会在其职责中取消选择。所以他们应该都有相同的主题X500Principal。那你为什么需要特定的证书呢?所有这些客户端都标识相同的客户端,因此从身份验证的角度来看,它们都是等效的。
它开始听起来好像您想要使用特定证书进行授权目的,而不仅仅是通过身份验证建立身份。如果是这样,这是错误的方法,滥用PKI。获得经过身份验证的身份后,授权是一个应用程序控制的步骤:获取对等证书的标识并查找授权数据库以查看是否允许该身份访问应用程序的这一部分。不要试图将cacerts文件用作授权数据库,这不是它的用途。
答案 1 :(得分:0)
我不知道这是否适合您,但我之前使用WSIT进行了动态别名选择(即一个密钥库,许多私钥条目)。有关详细信息,请参阅this article。 (如果那篇文章还不够,请告诉我 - 如果您需要,我可以发布更多细节)