首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 互联网 >

Tomcat 配置设立https访问(单向验证)

2013-09-17 
Tomcat 配置设置https访问(单向验证)注1:以下内容SSL链路加密(对来往数据进行加密)或单向验证(只验证服务

Tomcat 配置设置https访问(单向验证)
注1:以下内容SSL链路加密(对来往数据进行加密)或单向验证(只验证服务端)的步骤,也是tomcat配置https双向验证的一部分。双向验证需要使用两对证书,客户端与服务端互相交换公钥,发送消息时A使用自己的私钥加密数据,B使用A的公钥解密。
注2:分析IE实现实现SSL连接的中的证书双向认证过程:
在地址栏中输入https://localhost:8443
客户端向服务器发送hello消息,tomcat服务器侦听8443端口,收到SSL连接的hello消息,服务器发送server certificate,并且发送client certificate request.客户端IE收到server certificate后取出issuer项,和IE受信任的根证书库中证书的subject比对,找到合适的根证书认证server certificate。并且同时向服务器发送client certificate,服务器收到client certificate后,tomcat服务器查找根证书库cacerts中的根证书的suject,找到合适的根证书认证client certificate.在认证的同时完成密钥协商。客户端认证结束后,IE会弹出"安全警报"对话框,用户可以查看服务器证书,以及服务器证书是否受信任,可以选择是否继续SSL连接。

参考链接:
1. Java+Https+Tomcat双向验证实例:http://blog.csdn.net/zhongming_software/article/details/8592331
2. Tomcat+Axis2 WebService配置SSL单向验证:http://blog.csdn.net/honglei915/article/details/6073290
3. Tomcat配置HTTPS方式(单向):http://www.blogjava.net/stevenjohn/archive/2012/09/26/388600.html

1. 服务端创建KeyStore命令:




2.2 客户端访问代码

其中HeaderOMElement.createHeaderOMElement()指的是将用户信息添加到soap header中,用于服务端验证。
代码如下:
注:keystorePass="changeit",对应第一部分申请证书时的密码设置。
3.2 修改%TOMCAT_HOME%/conf/web.xml文件
  屏蔽http链接,所有http访问都重定向为https访问,在文件结尾添加代码:
   

3.4 抓包显示,通过TcpTrace抓包显示截图如下:




4. 配置特定资源访问使用https某些情况下,某些特定资源需要走https协议,如登录请求。这时,我们可以在web.xml中配置约束。
  
<security-constraint>         <web-resource-collection>             <web-resource-name>SSL Resource</web-resource-name>             <url-pattern>/index.jsp</url-pattern>         </web-resource-collection>         <user-data-constraint>              <transport-guarantee>CONFIDENTIAL</transport-guarantee>         </user-data-constraint>  </security-constraint>

这样当使用如下请求访问登录页面时,则服务器将该请求建立在https连接上。
  http://localhost:8080/TestWS/index.jsp


备注:
TcpTrace设置:监听8888,目的地地址:localhost,转发8443
客户端访问:http://localhost:8888/TestWS/,则是指将数据包发往8888,TcpTrace接收到数据包转发给8443

问题1:org.apache.axis2.AxisFault: Transport error: 302 Error: Moved Temporarily
若在tomcat中配置http(端口8080)访问自动转到https(端口8443),使用TcpTrace进行端口转发抓包时会报错:
org.apache.axis2.AxisFault: Transport error: 302 Error: Moved Temporarily
at org.apache.axis2.transport.http.HTTPSender.handleResponse(HTTPSender.java:296)
at org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:190)
at org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:75)
at org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessageWithCommons(CommonsHTTPTransportSender.java:371)
at org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:209)
at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:448)
at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:401)
at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:228)
at org.apache.axis2.client.OperationClient.execute(OperationClient.java:163)
at com.*.webservice.WSStub.sum(WSStub.java:210)
at com.*.testws.TestClient.main(TestClient.java:28)
验证失败:Transport error: 302 Error: Moved Temporarily
问题2:java.security.UnrecoverableKeyException: Password verification failed
由于keytool设置证书的默认密码是changeit,若改为其他密码,则会导致在客户端调用时出现错误:
java.security.UnrecoverableKeyException: Password verification failed
暂时解决方法是将证书的密码设置为changeit,参考链接:http://www.wirelust.com/
其他解决方法还需要继续研究。

问题3:
如果AC主机不能通过域名查找,必须使用IP,但是这个IP只有在配置后才能确定,这样证书就必须在AC确定IP地址后才能生成。
问题4:
证书文件只能绑定一个IP地址,假设有10.1.25.250 和 192.168.1.250 两个IP地址,在证书生成文件时,如使用了10.1.25.250,通过IE就只能使用10.1.25.250 来访问AC-WEB,192.168.1.250是无法访问AC-WEB的。

热点排行