使用Axis2附加客户端证书?
是否可以轻松地将客户端证书附加到使用wsdl2java生成的Axis2存根? 我需要在每个请求的基础上动态更改客户端证书,因此只需将其存储在密钥库中就不适用于我们的情况。
我已经找到了非SOAP调用的示例,但找不到与使用Axis客户端存根相关的任何内容。 尝试破解XML for SOAP调用是一个选项,我猜,albiet是一个痛苦的选择! 呻吟!
如果要根据所建立的连接更改使用哪个证书,则需要配置SSLContext
以执行此操作,如以下答案中所述: https : //stackoverflow.com/a/3713147/372643
据我所知,Axis 2使用Apache HttpClient 3.x,因此您需要按照其配置SSLContext
(如果需要,还有X509KeyManager
)的方式。 最简单的方法可能是使用SSLContext
配置Apache HttpClient的全局https
协议处理程序,使用X509KeyManager
设置,配置为根据需要选择客户端证书(通过chooseClientAlias
)。
如果发行者和连接的Socket
(可能是远程地址)不足以决定选择哪个证书,则可能需要实现更复杂的逻辑,这几乎不可避免地要求与应用程序的其余部分仔细同步。
编辑 :
一旦构建了SSLContext
和X509KeyManager
,就需要将它们传递给Apache HttpClient 3.x. 为此,您可以构建自己的SecureProtocolSocketFactory ,它将从此SSLContext
构建套接字(通过SSLSocketFactory
,请参阅SSLContext
方法)。 Apache HttpClient 3.x SSL指南中有一些示例。 避免使用EasySSLProtocolSocketFactory
,因为它不会检查任何服务器证书(从而允许MITM攻击)。 您也可以尝试这种实现 。
请注意,您只需要自定义X509KeyManager
,您可以使用null
为其他参数初始化SSLContext
(通过init
)以保留默认值(特别是默认信任设置)。
然后,使用以下内容为Apache HttpClient 3.x全局“安装”此SecureProtocolSocketFactory
:
Protocol.registerProtocol("https", new Protocol("https", (ProtocolSocketFactory)secureProtocolSocketFactory, 443));