最近,很多项目需要把服务通信由http协议变更为https,已增加安全性,参考网上一些资料,在tomcat上进行修改。
使用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)
添加
注:红色路径指向上一步中生成的server.keystore和server.truststore,根据自己的实际情况填写。
端口号可根据实际情况修改
注释掉:
重启tomcat,OK!
3.客户端测试程序,核心代码。
不再赘述Axis如何发布和调用Webservice,详情度娘。
public class Test{
public static void main(String[] args) throws Exception {
System.setProperty("javax.net.ssl.keyStore","D:\\client.keystore");
System.setProperty("javax.net.ssl.keyStorePassword", "123456");
System.setProperty("javax.net.ssl.trustStore","D:\\client.truststore");
System.setProperty("javax.net.ssl.trustStorePassword", "123456");
Service service = new Service();
String endpoint = "https://ip:8443/dataexsys/services/dataexService?wsdl";
String operationName = "getDirService";
Call call = (Call) service.createCall();
// 设置调用服务来源
call.setTargetEndpointAddress(endpoint);
// 设置调用方法名
call.setOperationName(new QName(endpoint, operationName));
// 调用接口
String ret = (String)call.invoke(new Object[]{});
System.out.println(ret);
}
}