使用Axis2附加客户端证书?

Sun*_*nny 8 java ssl axis axis2 ssl-certificate

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

我已经找到了为非SOAP调用执行此操作的示例,但找不到与使用Axis客户端存根相关的任何内容.试图破解XML for SOAP调用是一个选项,我猜,albiet是一个痛苦的选择!呻吟!

Bru*_*uno 6

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

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

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

编辑:

一旦你建立你的SSLContextX509KeyManager,你需要将它们传递到Apache的HttpClient 3.x的 为此,您可以构建自己的SecureProtocolSocketFactory,它将从此构建套接字SSLContext(通过SSLSocketFactory参见SSLContext方法).Apache HttpClient 3.x SSL指南中有一些示例.避免EasySSLProtocolSocketFactory,因为它不会检查任何服务器证书(从而允许MITM攻击).您也可以尝试这种实现.

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

然后,SecureProtocolSocketFactory使用以下内容为Apache HttpClient 3.x全局"安装" 它:

Protocol.registerProtocol("https", new Protocol("https",
   (ProtocolSocketFactory)secureProtocolSocketFactory, 443));
Run Code Online (Sandbox Code Playgroud)