现在的位置: 首页 > 综合 > 正文

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

2018年05月26日 ⁄ 综合 ⁄ 共 2736字 ⁄ 字号 评论关闭

最近,客户想把服务通信有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 RSA

keytool -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.keystore
keytool -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.keystore
keytool -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 { 
	
		//这里是https
		String 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基础,其实并不困难。

加油,各位。






抱歉!评论已关闭.