您的位置:首页 > 理论基础 > 计算机网络

Tomcat 配置WebService的HTTPS实现SSL的单双向认证

2014-07-03 14:07 736 查看
近日项目上使用Tomcat发布了一个Web Service服务,客户要求实现HTTPS的SSL安全技术提供服务接口,以下做个备份。

一、单向认证

1. 首先使用Keytool工具生成服务端的Keystore文件,Keytool工具实现确认下机器上是否配置了JDK的环境变量,如果没有的话需要进入JDK的当前目录执行命令了

keytool -genkey -alias webService_server -keystore server.keystore -keyalg RSA -keysize 4096 -storetype JKS

2. 导出服务端RSA证书并将证书导入到客户端truststore文件中,信任库文件被客户端使用,用于对服务端身份验证

keytool -export -alias webService_server -file webServiceServer.cer -storepass 123456a? -keystore server.keystore -storetype JKS

keytool -import -file webServiceServer.cer -storepass 123456a? -keystore client.truststore -alias serverkey -noprompt

3. 配置Tomcat根目录下conf/server.xml文件中以下内容,去注释

<Connector port="8443" protocol="HTTP/1.1" maxThreads="150"
minSpareThreads="25" maxSpareThreads="75"

enableLookups="false" disableUploadTimeout="true" SSLEnabled="true"

acceptCount="100" debug="0" scheme="https" secure="true" clientAuth="true" keystoreFile="server.keystore" keystorePass="password"sslProtocol="TLS" />

4.部署Axis服务,这里就不写如何部署了,直接启动Tomcat查看Wsdl

https://localhost:8443/ws/services/axisWS.Test?wsdl[/code] 
以上步骤完成了服务端的配置,下面是客户端的调用方式

5. 客户端调用代码

public static void main(String[] args) {
try {
String endpoint = "https://localhost:8443/eomsWS/services/axisWS.Test";
// 1.创建service对象,通过axis自带的类创建
Service service = new Service();
URL url = new URL(endpoint);
// 通过URL类的构造方法传入wsdlUrl地址创建URL对象
// 2.创建服务方法的调用者对象call,设置call对象的属性
Call call = (Call) service.createCall();
//配置客户端信任库文件路径
System.setProperty("javax.net.ssl.trustStore", "E:/keystore/client/client.truststore");
// 给call对象设置请求的URL属性
call.setTargetEndpointAddress(url);
String serviceName = "sayHello";
// 给call对象设置调用方法名属性
call.setOperationName(new QName("http://loushang.ws",serviceName));
// 给call对象设置方法的参数名、参数类型、参数模式
call.addParameter("param", XMLType.XSD_STRING, ParameterMode.IN);
// 设置调用方法的返回值类型
call.setReturnType(XMLType.SOAP_STRING);
// 4.通过invoke方法调用webservice
String param = "1222222";
String res = (String) call.invoke(new Object[] { param });// 调用服务方法
System.out.println(res);
} catch (ServiceException e) {
e.printStackTrace();
} catch (MalformedURLException e1) {
e1.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
}
}
6. 运行该代码,如果出现接口输出结果表示连接成功。
二、双向认证
双向认证较上面的步骤多出一个生成客户端密钥库,并将客户端证书RSA文件导入到服务端信任库文件的过程,步骤如下:
1. 在单向认证1,2步骤后生成客户端密钥库keystore文件
keytool -genkey -dname " CN=webService_Client, OU=JN, O=JN, L=JN, S=JN, C=CN" -storepass 123456a? -keystore client.keystore -keyalg RSA -keypass 123456a?
2. 导出客户端端RSA证书并将证书导入到服务端端truststore文件中,该信任库文件被服务端使用,用于对客户端端身份验证
keytool -export -file webServiceClient.cer -storepass 123456a? -keystore client.keystore
keytool -import -file webServiceClient.cer -storepass 123456a? -keystore server.truststore -alias clientkey -noprompt
3. 在Tomcat下conf/server.xml中的Connector 中添加truststoreFile和truststorePass,配置见单向认证中的3种追加
4. 修改客户端调用代码

//配置客户端信任库验证文件路径
System.setProperty("javax.net.ssl.trustStore", "E:/keystore/client/client.truststore");
//配置服务端信任库验证文件路径
System.setProperty("javax.net.ssl.keyStore", "E:/keystore/client/client.keystore");

5. 重启Tomcat测试代码,即可。

参考文献路径: http://www.ibm.com/developerworks/cn/webservices/ws-secaxis1/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: