【问题标题】:CXF SSL secured Web Service client with multiple certificates具有多个证书的 CXF SSL 安全 Web 服务客户端
【发布时间】:2011-03-21 12:37:56
【问题描述】:

我有一个 Java CXF 客户端,它通过相互身份验证连接到 SSL 安全 Web 服务。 我在客户端正确配置了我的密钥库和信任库,它工作正常。

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

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

提前感谢您的帮助。

【问题讨论】:

    标签: java web-services ssl cxf


    【解决方案1】:

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

    【讨论】:

    • 感谢您提供此链接。我还不知道这是否符合我的需要,我会看看这个证书选择功能。谢谢!
    • 链接已失效:(还有其他选择吗?
    【解决方案2】:

    所有证书都必须指向同一个客户端,否则 CA 会失职。因此,它们都应该具有例如相同的 subjectX500Principal。那么为什么需要特定的证书呢?它们都标识同一个客户端,因此从身份验证的角度来看,它们都是等效的。

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

    【讨论】:

    • 感谢您的回复。我同意你的看法,我必须区分身份验证和授权。身份验证由 SSL 提供,授权将由 SOAP 中的 WS-Security 和 SAML 令牌提供。
    猜你喜欢
    • 2014-02-23
    • 2021-08-05
    • 2014-09-06
    • 1970-01-01
    • 2015-08-17
    • 2020-10-23
    • 2013-12-05
    • 2015-10-20
    • 1970-01-01
    相关资源
    最近更新 更多