为了使客户端能够通过https 访问webService,需要给tomcat和axis2配置ssl.分别在服务器端和客户端做配置:
服务器端:
1. 在服务器端生成证书
建立文件夹c:/crt,在dos窗口中执行以下命令。
- cd c:/ crt
-
- keytool -genkey -keyalg RSA -dname "cn=Jim,ou=sango,o=none,l=china,st=beijing,c=us" -alias server -keypass Aa1234 -keystore server.jks -storepass Aa1234 -validity 3650
在c:/crt 文件夹下生成证书:server.jks
keytool是JDK自带的证书管理命令。
2. 配置Tomcat的SSL
编辑C:/apache-tomcat-6.0.29/conf/server.xml, 添加以下代码:
- <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
-
- maxThreads="150" scheme="https" secure="true"
-
- clientAuth="false" sslProtocol="TLS"
-
- keystoreFile="C:/crt/server.jks" keystorePass="Aa1234"/>
keystoreFile是证书的位置,keystorePass是生成证书时指定的密码。
验证配置:https://localhost:8443/
3. 配置Axis2的SSL
编辑C:/apache-tomcat-6.0.29/webapps/axis2/WEB-INF/web.xml,添加以下代码:
- <transportReceiver name="https" class="org.apache.axis2.transport.http.SimpleHTTPServer">
-
- <parameter name="port" locked="false">8443</parameter>
-
- </transportReceiver>
-
- <transportSender name="https"
-
- class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-
- <parameter name="PROTOCOL" locked="false">HTTP/1.1</parameter>
-
- <parameter name="Transfer-Encoding">chunked</parameter>
-
- </transportSender>
客户端,这里所说的客户端不是浏览器,而是程序中调用WebService的程序
1. 导入服务器端的证书
在客户端建立文件夹c:/crt,把服务器端生成的证书server.jks拷贝到c:/crt,在dos窗口中分别执行以下命令。
- cd c:/ crt
- keytool -export -alias server -keystore server.jks -file server.cer
- cd C:/Program Files/Java/jdk1.6.0_20/jre/lib/security/
- keytool -import -trustcacerts -alias server -keystore cacerts -file c:/crt/server.cer -storepass changeit
上个命令中的C:/Program Files/Java/jdk1.6.0_20/jre/lib/security/cacerts 必须指向运行时使用的JRE的对应文件夹。
2. 在程序中添加代码指定证书位置,在xxxxFactory类的getXXXStub方法中调用客户端的代码之前加上:
- System.setProperty("javax.net.ssl.trustStore"," C:/Program Files/Java/jdk1.6.0_20/jre/lib/security/cacerts" );
-
- System.setProperty("javax.net.ssl.trustStorePassword","Aa1234");
这样配置好后,就可以通过https调用客户端了。生成客户端的时候,可以用http生成。http和https生成的客户端是一样的。
原文地址:http://blog.csdn.net/honglei915/archive/2010/12/13/6073290.aspx