我正在尝试编写我的第一个SOA客户端,并且遇到了困难 “双向SSL”部分。
我们的服务器在Weblogic下运行,但我的应用程序是一个简单的Java控制台应用程序 - 它不能在任何容器中运行。
服务器使用并需要证书。我们使用来自Godaddy.com的受信任证书,我们也有内部证书。
我们的sysadm给了我服务器证书,我使用keytool将其添加到我的JRE“cacerts”文件中。我被告知我应该使用Spring-WS,因为它会让我的生活更轻松,但我无法让它工作,因为Chap有很多变化。 7提到,我不确定应该使用哪一个。他还为我个人创建了一个.jks文件供我授权。
对于这个简单的应用程序,我宁愿不使用Spring(SOA方法是一个简单的“添加注释”方法,没有实质性的返回数据。
我正在使用MyEclipse 9.1并尝试使用Maven4MyEclipse。
我的问题是:
鉴于我的身份验证证书可以通过JRE cacerts文件获得(如果我理解正确的话),我需要做的主要是能够在SSL握手期间显示我的.jks文件。
没有春天我可以这样做吗?如果是这样,有没有办法我可以简单地用我的.jks文件设置一个System属性,以便自动处理?或者我真的需要使用Spring来处理授权部分吗?
如果是后者,我怎么知道使用哪种 Spring安全拦截器类型? XwsSecurityInterceptor或Wss4jSecurityInterceptor?
或者刚刚发生了另一个问题。也可以将.jks文件添加到 cacerts文件并自动处理授权?
谢谢,
米奇
P.S。信不信由你,我的组织中显然没有现成的Java客户端示例来查看模板。
答案 0 :(得分:2)
对于双向身份验证,我在启动客户端应用时始终使用以下命令:
java -Djavax.net.ssl.keyStore=myClientKeystore -Djavax.net.ssl.keyStorePassword=123456 -Djavax.net.ssl.trustStore=myTrustStore -Djavax.net.ssl.trustStorePassword=123456 -Djavax.net.debug=ssl
也就是说,我的客户端私有证书位于“myClientKeystore”中,然后服务器公共证书位于“myTrustStore”中。 javax.net.debug = ssl将使您的生活更轻松,因为如果您无法使SSL会话正常工作,它会输出一些不错的调试信息。
这是SSL部分。 然后我认为你将SOA与Web服务和SOAP混合在一起。 SOA通常意味着面向服务的体系结构并且是非常高级的。我认为你在谈论SOAP实现。
如果Web服务不仅仅是微不足道的,那么,框架将使您的生活更轻松。除了Spring-ws(我也喜欢),你可以谷歌搜索CXF和Axis2,你会发现大量的例子如何编写SOAP客户端。但是可以肯定的是,如果您能够手动创建SOAP信封,那么您可以将Web服务调用编写为raw(使用SoapUI生成测试信封是一个好的开始......)。
然后,看一下:this page,它有一个关于如何在没有任何框架的情况下通过HTTP进行SOAP调用的示例。当然,由于您使用的是SSL,因此您应该引用“https://”地址。