繁体   English   中英

如何将SSLContext与轴一起使用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM