背景: 本笔记用于记录项目开发中,利用SSL 双向认证,的方式加密webservice 服务.
系统环境: Win7 | SUN JDK1.7.0_40| Tomcat7.0.42
浏览器: IE9, Firefox27.0.1
1. 生成证书
1.1生成服务端证书
keytool -genkey -v -alias tomcat -keyalg RSA -keystore tomcat.keystore-validity 365
1.2 生成客户端证书
keytool -genkey -v -alias client -keyalg RSA -storetype PKCS12 -keystoreclient.p12 -validity 365
1.3 导出客户端证书
keytool -export -alias client-keystore client.p12 -storetype PKCS12 -storepass client -rfc -fileclient.cer
1.4 把客户端证书加入服务端证书信任列表
keytool -import -alias client -v -file client.cer -keystoretomcat.keystore
说明:
参数说明。这里提供的密码是服务端证书的存取密码。
1.5 导出服务端证书
keytool -export alias tomcat -keystore tomcat.keystore -storepass server-rfc -file tomcat.cer
说明:
把服务端证书导出。这里提供的密码也是服务端证书的密码。
1.6 生成客户端信任列表
keytool -import -file tomcat.cer -storepass server -keystoreclient.truststore -alias tomcat -noprompt
说明:
让客户端信任服务端证书
2. 配置服务端为只允许HTTPS连接
2.1 配置Tomcat 目录下的/conf/server.xml
<Connectorport="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150"scheme="https" secure="true" clientAuth="true"
sslProtocol="TLS"keystoreFile="E:/tomcat.keystore"
keystorePass="server"truststoreFile="E:/tomcat.keystore"
truststorePass="server"/>
说明:
这段内容在server.xml里面,如果想使用https的默认端口443,请修改这里的port参数。其中的clientAuth="true"指定了双向证书认证。keystorePass为服务器端证书密码, keystoreFile为服务器端证书。
2.2 配置服务端项目web.xml
在
<login-config>
<!-- Authorization setting for SSL -->
<auth-method>CLIENT-CERT</auth-method>
<realm-name>Client Cert Users-only Area</realm-name>
</login-config>
<security-constraint>
<!-- Authorization setting for SSL -->
<web-resource-collection>
<web-resource-name>SSL</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
说明:
这里限制了WEB service服务地址的访问必须为https连接。<url-pattern>要根据你的web service服务地址配置。
3、配置浏览器,安装证书,使其不再提示证书错误
3.1 安装客户端证书
双击1.2生成的client.p12文件,弹出如下窗口:
单击“下一步”,
单击“下一步”,
选择证书存放位置
单击完成,
单击“是(Y)”,证书导入成功。
这样tomcat 的SSL 双向认证就完成了。
4、调用webservice
4、1 设置环境,调用webservice.
System.setProperty("javax.net.ssl.trustStore","E:/client.truststore");
System.setProperty("javax.net.ssl.trustStorePassword","server");
System.setProperty("javax.net.ssl.keyStoreType","PKCS12");
System.setProperty("javax.net.ssl.keyStore","E:/client.p12");
System.setProperty("javax.net.ssl.keyStorePassword","client");
//info.acmr.com
URLurl = new URL("https://info.acmr.com:8443/infoapi/queryData?wsdl");
QName qname = newQName("http://infoapi.info.acmr.com/","InfoDataApiImplService");
Service service =Service.create(url, qname);
InfoDataApi client = service.getPort(InfoDataApi.class);
说明: InfoDataApi 和 InfoDataApiImplService 是用wsimport生成的WEB service客户端。
本文介绍如何通过SSL双向认证加密Webservice服务,包括生成及配置证书、浏览器安装证书、调用Webservice等内容。
双向认证&spm=1001.2101.3001.5002&articleId=21228837&d=1&t=3&u=b1806294b27f415f8c9977d85a99b150)
3318

被折叠的 条评论
为什么被折叠?



