AXIS通过HTTPS(SSL加密)方式访问Webservice

来源:互联网 发布:围堰稳定性计算软件 编辑:程序博客网 时间:2024/04/26 16:17

最近,客户想把服务通信有http协议变更为https增加安全性,以为修改下tomcat,配置下就OK了,但我们的客户端请求SSO服务器的Webservice请求走的是http,这就发生了悲剧。

怎么办?

先从配置tomcat开始做起吧:


1、 使用JDK自带的工具创建密匙库和信任库。

 

使用keytool生成密钥库和信任库

如下4个文件:

client.keystore,client.truststore,server.keystore,server.truststore

 

为了方便大家,我将命令行写入脚本。

 

脚本如下,存入bat文件:

set SERVER_DN="CN=Server, OU=ths, O=ths, L=BEIJING, S=BEIJING, C=CN" set CLIENT_DN="CN=Client, OU=ths, O=ths, L=BEIJING, S=BEIJING, C=CN" set KS_PASS=-storepass 123456 set KEYINFO=-keyalg RSAkeytool -genkey -alias Server -dname %SERVER_DN% %KS_PASS% -keystore server.keystore %KEYINFO% -keypass 123456 keytool -export -alias Server -file ths_https.cer %KS_PASS% -keystore server.keystorekeytool -import -file ths_https.cer %KS_PASS% -keystore client.truststore -alias serverkey -noprompt keytool -genkey -alias Client -dname %CLIENT_DN% %KS_PASS% -keystore client.keystore %KEYINFO% -keypass 123456 keytool -export -alias Client -file ths_https.cer %KS_PASS% -keystore client.keystorekeytool -import -file ths_https.cer %KS_PASS% -keystore server.truststore -alias clientkey -noprompt 

密码我设置的是123456,这个你可以自己设定,把脚本中所有的123456替换掉就可以了,其他参数(文件名称啥的)无所谓。

注:在什么位置执行该脚本,这4个文件就会生成到什么位置。


2、 更改tomcat支持https,修改配置文件(server.xml)

 

增加:

<Connector port="8443"  protocol="HTTP/1.1"  SSLEnabled="true" maxThreads="150"  scheme="https"secure="true" clientAuth="false"

keystoreFile="d:\server.keystore"keystorePass="123456

truststoreFile="d:\server.truststore" truststorePass="123456"

sslProtocol="TLS" />

 

注:红色路径指向上一步中生成的server.keystoreserver.truststore,根据自己的实际情况填写。

端口号可根据实际情况修改

 

去掉:

<ListenerclassName="org.apache.catalina.core.AprLifecycleListener"SSLEngine="on" />


重启tomcat,OK!

再来配置Axis

在server-config.wsdd中修改name为SSOService的节点,增加红色部分

<service name="SSOService"provider="java:RPC">         <requestFlow><handler type="soapmonitor"/></requestFlow><responseFlow><handler type="soapmonitor"/></responseFlow>         <parametername="allowedMethods" value="*" />         <parametername="className"value="com.ths.platform.sso.services.SSOService" /></service>

注:使用Axis 一般server-config.wsdd再web-inf目录下。

4、客户端测试程序,核心代码。不再赘述Axis如何发布和调用Webservice,不懂的,可以自己上网搜索

public class Test{ public static void main(String [] args) throws Exception { //这里是httpsString endpoint = "https://localhost:" +"8443"+ "/axis/HelloWorld";//client.keystore和client.truststore路径根据自己情况填写System.setProperty("javax.net.ssl.keyStore", "E:\\client.keystore"); System.setProperty("javax.net.ssl.keyStorePassword", "password"); System.setProperty("javax.net.ssl.trustStore", "E:\\client.truststore"); System.setProperty("javax.net.ssl.trustStorePassword", "password");                 //关键是上面几行代码,下面是调用Webservice常规步骤Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress( new java.net.URL(endpoint) ); call.setOperationName( "sayHello" ); String result = (String) call.invoke( new Object[] {} ); System.out.println( result ); } } 


早晨刚刚拿到这个问题的时候,感觉有些棘手,如果懂得基本的原理,有Webservice和https基础,其实并不困难。

加油,各位。







0 0
原创粉丝点击