java - 使用 Axis2 附加客户端证书?

标签 java ssl axis2 ssl-certificate axis

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

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

最佳答案

如果您想根据建立的连接更改使用的证书,您需要配置 SSLContext这样做,如本答案中所述:https://stackoverflow.com/a/3713147/372643

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

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

编辑:

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

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

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

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

关于java - 使用 Axis2 附加客户端证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8639512/

相关文章:

asp.net-core - Asp.net 核心未使用正确的证书

node.js - HTTPS 重定向仅在页面重新加载时有效

ruby - SOAP + SSL + Ruby Savon - HTTPClient::ConnectTimeoutError:执行已过期

java - axis2 导致 javax.xml.stream.XMLStreamException : element text content may not contain START_ELEMENT

java - 房间 : performance of insert(Object) vs insert(List<Object>)

java - 如何将 MongoDB 中存储的复合 ID 转换为 Morphia Java 实体对象?

java - 如何通过 Web 服务传递自定义对象

java - Axis 2 错误 : Unable to add the following facets

java - jpa mysql 表不存在 autoGenerate 不起作用

java - openmpi + java,无法找到或加载主类