我正在使用具有浏览器客户端的分布式应用程序中的服务器,并且还参与了与第三方的服务器到服务器通信。我的服务器具有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客户端运行时的支持
有需要吗?
这是一个很难破解的坚果,因此记录如下:
要解决此问题,它需要一个自定义,KeyManager
并SSLSocketFactory
使用此自定义KeyManager
访问的分隔符KeyStore。我发现基码本KeyStore和SSLFactory对这个优秀的博客条目: 如何对动态选择-一个证书别名时,调用的Web服务
然后,SSLSocketFactory
需要将专门的插入到WebService上下文中:
service = getWebServicePort(getWSDLLocation());
BindingProvider bindingProvider = (BindingProvider) service;
bindingProvider.getRequestContext().put("com.sun.xml.internal.ws.transport.https.client.SSLSocketFactory", getCustomSocketFactory());
当getCustomSocketFactory()返回一个SSLSocketFactory使用该方法产生如上所述。假定指示该SSLSocketFactory属性的字符串是此实现专有的,那么这仅适用于JDK中内置的Sun-Oracle impl的JAX-WS RI 。
在此阶段,通过SSL保护JAX-WS服务通信的安全,但是如果您从同一安全服务器()加载WSDL,则将遇到引导程序问题,因为将不会使用HTTPS收集WSDL的请求与Web服务相同的凭据。我通过使WSDL在本地可用(file:/// …)并动态更改Web服务端点来解决了这个问题:(可以在此论坛中找到有关为什么需要这样做的很好的讨论)
bindingProvider.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, webServiceLocation);
现在,WebService已启动,并可以使用命名的(别名)客户端证书和相互身份验证通过SSL与服务器副本进行通信。
我正在一个分布式应用程序中的服务器上工作,该应用程序有浏览器客户端,还参与与第三方的服务器到服务器通信。我的服务器有一个CA签名的证书,允许我的客户端使用HTTP/S和XMPP(安全)进行TLS(SSL)通信连接。一切都很好。 现在,我需要通过HTTPS/SSL使用JAX-WS安全地连接到第三方服务器。在这种通信中,我的服务器充当JAX-WS交互中的客户机,我有一个由第三方签署的客户机证书。 我试
问题内容: 我已经使用JAXWS-RI 2.1为基于WSDL的Web服务创建了一个接口。我可以与Web服务进行交互,没有问题,但是无法指定将请求发送到Web服务的超时时间。如果由于某种原因它没有响应,则客户似乎永远旋转它的轮子。 到处搜寻表明我可能应该尝试执行以下操作: 我还发现,根据您拥有的JAXWS-RI版本,您可能需要设置以下属性: 我的问题是,无论以上哪一项是正确的,我都不知道 在哪里 可
问题内容: 我尝试使用JAX-WS检索客户端IP,我曾经使用过: 我在要求中得到一个,mc不为空。 我的问题是,因为我使用的是Java独立应用程序,所以要使用哪个JAR ? 谢谢 问题答案: 如何获取jax-ws服务的Web服务客户端地址取决于您是否: 将Web服务作为servlet运行(在Java EE容器中),或者 将Web服务作为独立应用程序运行(Java SE 6或7)。 Servlet
问题内容: 我的问题很简单 如何以编程方式设置我的按钮layout_gravity? 我在互联网上找到了它,但它只是抛出了一个Nullpointer异常: 有什么办法吗? 问题答案: Java Kotlin 有关重力值以及如何设置重力,请检查“重力”。 基本上,您应该选择依赖于父项。可以是等等。
问题内容: 我有一个奇怪的问题。我试图以编程方式将dataSource分配给表。 我已使用界面生成器在ViewController中为其创建了一个和IBOutlet。我创建了一个实现的类。我将表的设置为dataSource的实例。一切都会编译并正常运行,直到设置dataSource的行在运行时执行。 错误是并且定义线突出显示。 有什么想法为什么我得到这个运行时错误?我正在Swift中使用XCode
问题内容: 这个问题类似于: jsf:在UI中绑定到inputtext的integer属性在提交时设置为零 但是我对解决方案并不完全满意。上下文是相同的:我有一个Web表单,需要一个Integer值。如果文本框为空,我希望我的Integer字段为“null”,但是EL Parser会自动将我的id字段设置为“ 0”。 我可以通过在本地Tomcat VM中设置JVM参数来解决此问题: -Dorg.a