为了账号安全,请及时绑定邮箱和手机立即绑定

如何以编程方式设置JAX-WS客户端的SSLContext?

如何以编程方式设置JAX-WS客户端的SSLContext?

PIPIONE 2019-10-15 15:01:48
我正在使用具有浏览器客户端的分布式应用程序中的服务器,并且还参与了与第三方的服务器到服务器通信。我的服务器具有CA签名的证书,可让我的客户端通过使用HTTP / S和XMPP(安全)的TLS(SSL)通信进行连接。一切都很好。现在,我需要通过HTTPS / SSL使用JAX-WS安全地连接到第三方服务器。在此通信中,我的服务器在JAX-WS交互中充当客户端,并且我有一个由第三方签名的客户端证书。我尝试通过标准系统配置(-Djavax.net.ssl.keyStore=xyz)添加新的密钥库,但是其他组件显然受此影响。尽管我的其他组件正在对其SSL配置(my.xmpp.keystore=xxx, my.xmpp.truststore=xxy, ...)使用专用参数,但看来它们最终还是使用global SSLContext。(配置名称空间my.xmpp.似乎指示分离,但事实并非如此)我还尝试将客户证书添加到原始密钥库中,但是-同样,我的其他组件似乎也不喜欢它。我认为,我剩下的唯一选择是以编程方式挂接到JAX-WS HTTPS配置中,以设置客户端JAX-WS交互的密钥库和信任库。关于如何执行此操作的任何想法/指标?我发现的所有信息都使用该javax.net.ssl.keyStore方法或设置了SSLContext-我猜想-将以同一配置结尾的全局信息。我得到的最有用的帮助是这个旧的错误报告,该报告要求我需要的功能:添加对将SSLContext传递到JAX-WS客户端运行时的支持有需要吗?
查看完整描述

3 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

这是我根据这篇文章进行一些细微调整后解决的方法。此解决方案不需要创建任何其他类。


SSLContext sc = SSLContext.getInstance("SSLv3");


KeyManagerFactory kmf =

    KeyManagerFactory.getInstance( KeyManagerFactory.getDefaultAlgorithm() );


KeyStore ks = KeyStore.getInstance( KeyStore.getDefaultType() );

ks.load(new FileInputStream( certPath ), certPasswd.toCharArray() );


kmf.init( ks, certPasswd.toCharArray() );


sc.init( kmf.getKeyManagers(), null, null );


((BindingProvider) webservicePort).getRequestContext()

    .put(

        "com.sun.xml.internal.ws.transport.https.client.SSLSocketFactory",

        sc.getSocketFactory() );


查看完整回答
反对 回复 2019-10-15
  • 3 回答
  • 0 关注
  • 621 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信