【问题标题】:Attach client certificates with Axis2?使用 Axis2 附加客户端证书?
【发布时间】:2012-01-28 04:45:19
【问题描述】:

是否可以轻松地将客户端证书附加到使用 wsdl2java 生成的 Axis2 存根?我需要根据每个请求动态更改客户端证书,因此仅将其存储在密钥库中不适用于我们的情况。

我找到了针对非 SOAP 调用执行此操作的示例,但找不到与使用 Axis 客户端存根相关的任何内容。我想尝试破解 SOAP 调用的 XML 是一种选择,虽然很痛苦!呻吟!

【问题讨论】:

  • ¿这考虑到您需要当前证书来检索带有新证书的消息?此外,WS 客户端必须能够替换密钥库中的证书,因为它不能存在于密钥库之外并保持对 java 的可访问性。

标签: java ssl axis2 ssl-certificate axis


【解决方案1】:

如果您想根据建立的连接更改使用的证书,则需要配置 SSLContext 来执行此操作,如以下答案所述:https://stackoverflow.com/a/3713147/372643

据我所知,Axis 2 使用 Apache HttpClient 3.x,因此您需要按照它的方式配置 SSLContext(如果需要,还需要配置 X509KeyManager)。 最简单的方法可能是使用您的 SSLContext 配置 Apache HttpClient 的全局 https 协议处理程序,并设置一个配置为根据需要选择客户端证书的 X509KeyManager(通过 chooseClientAlias)。

如果颁发者和连接的Socket(可能是远程地址)不足以决定选择哪个证书,您可能需要实现更复杂的逻辑,这几乎不可避免地需要与应用程序的其余部分仔细同步.

编辑

一旦您构建了 SSLContextX509KeyManager,您需要将它们传递给 Apache HttpClient 3.x。为此,您可以构建自己的SecureProtocolSocketFactory,它将从此SSLContext 构建套接字(通过SSLSocketFactory,参见SSLContext 方法)。 Apache HttpClient 3.x SSL guide 中有示例。避免使用EasySSLProtocolSocketFactory,因为它不会检查任何服务器证书(从而允许 MITM 攻击)。你也可以试试this implementation

请注意,您只需要自定义您的X509KeyManager,您可以使用init 初始化您的SSLContext(通过init),其他参数保持默认值(特别是默认信任设置) .

然后,使用类似这样的方式为 Apache HttpClient 3.x 全局“安装”这个SecureProtocolSocketFactory

Protocol.registerProtocol("https", new Protocol("https",
   (ProtocolSocketFactory)secureProtocolSocketFactory, 443));

【讨论】:

  • 谢谢,有用的信息。所以我需要这样做:httpclient.getHostConfiguration().setHost("www.whatever.com", 443, myhttps); 如何在 Axis2 中获取 httpClient - 我有 org.apache.axis2.client.Stub 和 ServiceClient,但我如何从这些获取底层 httpClient实例?
  • 我已经尝试过类似于其他帖子stackoverflow.com/a/6469030/420611 的方法,但无论我使用EasySSLProtocolSocketFactory 还是StrictSSLProtocolSocketFactory,我都会收到此异常:org.apache.commons.ssl.ProbablyBadPasswordException : 可能是错误的 JKS-Key 密码:java.security.UnrecoverableKeyException: Password must not be null
  • @Sunny,这听起来像是您的密钥库中的密码问题。独立于您的X509KeyManager,您需要能够在alias 之后从您的密钥库加载私钥和证书。您可以查看“包装”默认 X509KeyManager 并仅覆盖选择别名的逻辑(您可以使用 this 作为起点,客户端别名除外)。
  • 感谢@Bruno 的帮助,非常感谢。但是,即使对构造函数进行简单的一行调用,我也无法摆脱该异常。详情在这里:stackoverflow.com/questions/8663358/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-19
  • 1970-01-01
  • 2018-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多