2011-12-26 164 views
7

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

我发现了这样的例子,这是为非SOAP调用完成的,但找不到与使用Axis客户端存根相关的任何内容。尝试破解SOAP调用的XML是我猜的一个选项,albiet是一个痛苦的选择!呻吟!

+0

¿这考虑到你所需要的电流证书来检索消息使用新证书的帐户?此外,WS客户端必须能够替换密钥库中的证书,因为它不能存在于密钥库之外并保持对java的访问。 – Alfabravo 2011-12-26 22:42:52

回答

6

如果你想这取决于连接而成,以改变使用的证书,你需要配置SSLContext这样做,因为在这个答案说明:据我所知,轴https://stackoverflow.com/a/3713147/372643

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 guide中有例子。避免EasySSLProtocolSocketFactory,因为它不会检查任何服务器证书(从而允许MITM攻击)。您也可以尝试this implementation

请注意,你只有真正需要自定义X509KeyManager,就可以初始化你SSLContext(通过init)与null其他参数保持默认值(尤其是默认信任设置)。

然后,用这样的“安装”这一SecureProtocolSocketFactory全球对Apache的HttpClient 3.x的:

Protocol.registerProtocol("https", new Protocol("https", 
    (ProtocolSocketFactory)secureProtocolSocketFactory, 443)); 
+0

谢谢,有用的信息。所以我需要这样做:'httpclient.getHostConfiguration()。setHost(“www.whatever.com”,443,myhttps);'在Axis2中如何获得httpClient - 我有一个org.apache。 axis2.client.Stub和ServiceClient,但是如何从这些实例中获得底层httpClient? – Sunny 2011-12-27 01:03:50

+0

我尝试了一种类似于其他帖子的方法http://stackoverflow.com/a/6469030/420611但是不管我使用'EasySSLProtocolSocketFactory'还是'StrictSSLProtocolSocketFactory':org.apache.commons,我总是收到这个异常。 ssl.ProbablyBadPasswordException:可能是错误的JKS-Key密码:java.security.UnrecoverableKeyException:密码不能为空 – Sunny 2011-12-28 12:02:37

+0

@Sunny,这听起来像是密钥库中的密码问题。独立于你的'X509KeyManager',你需要能够在'alias'之后加载密钥库中的私钥和证书。您可以查看“包装”默认的'X509KeyManager',并且只覆盖您选择别名的逻辑(您可以使用[this](http://code.google.com/p/jsslutils/source/browse/trunk/jsslutils /src/main/java/org/jsslutils/sslcontext/keymanagers/FixedServerAliasKeyManager.java)作为起点,除了客户端别名)。 – Bruno 2011-12-28 14:25:28