【发布时间】:2010-09-14 19:52:44
【问题描述】:
我们的系统与多个网络服务提供商进行通信。它们都是从单个 Java 客户端应用程序调用的。到目前为止,所有 Web 服务都通过 SSL,但没有一个使用客户端证书。嗯,一个新的合作伙伴正在改变这一点。
让应用程序使用证书进行调用很容易;设置javax.net.ssl.keyStore 和javax.net.ssl.keyStorePassword 就可以了。但是,现在的问题是如何制作它,以便它仅在调用该特定 Web 服务时使用证书。我想更一般地说,我们希望能够选择要使用的客户端证书(如果有的话)。
一种快速的解决方案是设置系统属性,调用方法,然后取消设置。唯一的问题是我们正在处理一个多线程应用程序,所以现在我们需要处理同步或锁或你有什么。
每个服务客户端都应该彼此完全独立,并且它们被单独打包在单独的 JAR 中。因此,我想到的一个选择(尽管我们还没有正确分析它)是以某种方式隔离每个 JAR,也许将每个 JAR 加载到具有不同参数的不同 VM 下。这只是一个我不知道如何实现的想法(或者甚至可能,就此而言。)
This post 建议可以从密钥库中选择一个单独的证书,但如何将其附加到请求中似乎完全是一个不同的问题。
我们正在使用 Java 1.5、Axis2 和使用wsimport 或wsdl2java 生成的客户端类。
【问题讨论】:
标签: java web-services ssl