tomcat实现SSL单、双向认证 学习笔记(2)双向认证

来源:互联网 发布:微型云计算设备 编辑:程序博客网 时间:2024/04/29 16:00

背景: 本笔记用于记录项目开发中,利用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客户端。

        

0 0
原创粉丝点击