Java 是否将客户端证书附加到Axis2?
是否可以轻松地将客户端证书附加到使用wsdl2java生成的Axis2存根?我需要根据每个请求动态更改客户机证书,因此简单地将其存储在密钥库中不适合我们的情况Java 是否将客户端证书附加到Axis2?,java,ssl,axis2,ssl-certificate,axis,Java,Ssl,Axis2,Ssl Certificate,Axis,是否可以轻松地将客户端证书附加到使用wsdl2java生成的Axis2存根?我需要根据每个请求动态更改客户机证书,因此简单地将其存储在密钥库中不适合我们的情况 我已经找到了一些例子,其中这是针对非SOAP调用进行的,但是找不到任何与使用Axis客户端存根相关的内容。尝试破解SOAP调用的XML是一个选择,我想,这是一个痛苦的选择!呻吟 如果要根据建立的连接更改使用的证书,则需要配置SSLContext,如本答案中所述: 据我所知,Axis2使用ApacheHttpClient 3.x,因此您需要
我已经找到了一些例子,其中这是针对非SOAP调用进行的,但是找不到任何与使用Axis客户端存根相关的内容。尝试破解SOAP调用的XML是一个选择,我想,这是一个痛苦的选择!呻吟 如果要根据建立的连接更改使用的证书,则需要配置
SSLContext
,如本答案中所述:
据我所知,Axis2使用ApacheHttpClient 3.x,因此您需要按照它的方式配置SSLContext
(以及X509KeyManager
,如果需要)。
最简单的方法可能是使用SSLContext
配置Apache HttpClient的全局https
协议处理程序,设置X509KeyManager
,配置为根据需要选择客户端证书(通过chooseClientAlias
)
如果颁发者和连接的套接字
(可能是远程地址)不足以决定选择哪个证书,则您可能需要实现更复杂的逻辑,这几乎不可避免地需要与应用程序的其余部分小心同步
编辑:
一旦构建了SSLContext
和X509KeyManager
,就需要将它们传递给ApacheHttpClient 3.x。为此,您可以构建自己的套接字,它将从此SSLContext
构建套接字(通过SSLSocketFactory
,请参阅SSLContext
方法)。下面是一些例子。避免使用EasySSLProtocolSocketFactory,因为它不会检查任何服务器证书(从而允许MITM攻击)。你也可以试试
请注意,您只需要自定义X509KeyManager
,就可以使用null
对其他参数初始化SSLContext
,以保持默认值(特别是默认信任设置)
然后,在Apache HttpClient 3.x上全局“安装”这个SecureProtocolSocketFactory
,如下所示:
Protocol.registerProtocol("https", new Protocol("https",
(ProtocolSocketFactory)secureProtocolSocketFactory, 443));
?这考虑到您需要当前证书来检索具有新证书的邮件?此外,WS-client必须能够替换密钥库中的证书,因为它不能位于密钥库之外,并且可以访问java。谢谢,有用的信息。所以我需要这样做:
httpclient.getHostConfiguration().setHost(“www.whatever.com”,443,myhttps)代码>如何在Axis2中获得httpClient-我有一个org.apache.Axis2.client.Stub和ServiceClient,但是我如何从这些实例中获得底层httpClient呢?我尝试了一种类似于另一篇文章的方法,但不管我使用的是EasySSLProtocolSocketFactory
还是StrictsLProtocolSocketFactory
:org.apache.commons.ssl.ProbablyBadPasswordException:可能不好JKS密钥密码:java.security.UnrecoverableKeyException:密码不能为null@Sunny,这听起来像是密钥库上的密码问题。独立于X509KeyManager
,一旦别名
,您就需要能够从密钥库加载私钥和证书。您可以查看“包装”默认的X509KeyManager
,只覆盖选择别名的逻辑(您可以将其用作起点,但客户端别名除外)。感谢@Bruno的帮助,非常感谢。然而,即使对构造函数进行简单的一行调用,我也无法摆脱这个异常。详情如下: