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

标签 java web-services ssl cxf

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

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

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

预先感谢您的帮助。

最佳答案

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

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

关于java - 具有多个证书的 CXF SSL 安全 Web 服务客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3342484/

相关文章:

c# - 如何通过服务引用发布 Reflection.MethodBase

asp.net - 客户端身份验证 - 处理客户端证书

Java 打印基于位置

java - 带有 Grails 的 Vaadin

Windows 上的 Javafx 应用程序无需 Java(Maven 或...?)

windows - 在 Laravel 5 中发送电子邮件不起作用

php - Facebook PHP SDK : Unknown SSL protocol error

java - 单个 Logger 的每个 appender 的日志级别

java - 关于网络注释的困惑

web-services - Jackson 不使用 JSON 根元素