![](/img/trans.png)
[英]I have a keystore file, how do I provide keyManagers to sslContext in Android app?
[英]How do I use SSLContext with axis
我有一个Web应用程序,它调用需要SSL证书的Web服务。 我们有一个实现X509KeyManager来获取证书的类,我可以使用该密钥管理器构建一个SSLContext实例,但我没有运气使用它。
我使用wsdl2java使用axis(1)为请求生成类,遗憾的是我找到的所有解决方案都是针对axis2的。
以下是我为轴2找到的一些解决方案,我无法用轴(1)复制:
//solution 1
BindingProvider bindingProvider = (BindingProvider) service;
bindingProvider.getRequestContext().put("com.sun.xml.internal.ws.transport.https.client.SSLSocketFactory", sslContext.getSocketFactory());
//solution 2
aStub._getServiceClient().getOptions().setProperty(HTTPConstants.CUSTOM_PROTOCOL_HANDLER, new Protocol("https",(ProtocolSocketFactory)new SSLProtocolSocketFactory(sslCtx),443));
以下是我能够完成此任务的方法:
我创建了一个扩展JSSESocketFactory的类,类似于SunJSEESocketFactory(org.apache.axis.components.net)
public class MySocketFactory extends JSSESocketFactory implements SecureSocketFactory {
...
protected void initFactory() throws IOException {
...
SSLContext context = getContext();
this.sslFactory = context.getSocketFactory();
...
}
protected SSLContext getContext() throws Exception {
MyKeyManager myKeyManager = new MyKeyManager();
KeyManager[] km = new X509KeyManager[] { myKeyManager };
SSLContext context = SSLContext.getInstance("SSLv3");
context.init(km, null, null);
return context;
}
}
然后在对要求证书的Web服务进行任何调用之前
AxisProperties.setProperty("axis.socketSecureFactory",
MySocketFactory.class.getCanonicalName());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.