Sun*_*nny 8 java ssl axis axis2 ssl-certificate
是否可以轻松地将客户端证书附加到使用wsdl2java生成的Axis2存根?我需要在每个请求的基础上动态更改客户端证书,因此只需将其存储在密钥库中就不适用于我们的情况.
我已经找到了为非SOAP调用执行此操作的示例,但找不到与使用Axis客户端存根相关的任何内容.试图破解XML for SOAP调用是一个选项,我猜,albiet是一个痛苦的选择!呻吟!
如果要根据所建立的连接更改使用的证书,则需要配置SSLContext以执行此操作,如本答案中所述:https://stackoverflow.com/a/3713147/372643
据我所知,Axis 2使用Apache HttpClient 3.x,因此您需要按照其配置方式SSLContext(X509KeyManager如果需要).最简单的方法可能是配置Apache的HttpClient的全球https与协议处理程序SSLContext,建立与X509KeyManager配置,你需要(通过选择客户端证书chooseClientAlias).
如果发行者和连接Socket(可能是远程地址)不足以决定选择哪个证书,您可能需要实现更复杂的逻辑,这几乎不可避免地需要与应用程序的其余部分仔细同步.
编辑:
一旦你建立你的SSLContext和X509KeyManager,你需要将它们传递到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)
| 归档时间: |
|
| 查看次数: |
10702 次 |
| 最近记录: |