Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否将客户端证书附加到Axis2?_Java_Ssl_Axis2_Ssl Certificate_Axis - Fatal编程技术网

Java 是否将客户端证书附加到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,因此您需要

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


我已经找到了一些例子,其中这是针对非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的帮助,非常感谢。然而,即使对构造函数进行简单的一行调用,我也无法摆脱这个异常。详情如下: