tomcat 容器下web项目由http改为https操作步骤及相关的坑
一、https介绍:
HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTPS,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统的最初研发由网景公司进行,提供了身份验证与加密通讯方法,现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面
二、https与http区别:
1、https协议需要到ca申请证书,一般免费证书很少,需要交费。
2、http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
三、SSL协议:
SSL安全套接层协议(Secure Socket Layer)
为Netscape所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取及窃听。目前一般通用之规格为40 bit之安全标准,美国则已推出128 bit之更高安全标准,但限制出境。只要3.0版本以上之IE.或Netscape浏览器即可支持SSL。
当前版本为3.0。它已被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输。
SSL协议位于TCP/IP协议与各种应用层协议之间,是一种国际标准的加密及身份认证通信协议,为TCP提供一个可靠的端到端的安全服务,为两个通讯个体之间提供保密性和完整性(身份鉴别)。SSL协议可分为两层:SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
四、TOMCAT 配置https:
1、生成服务器端证书文件(仅用于开发和测试,如用于对外服务的商业网站会提示不安全之类的问题)
- 进入%JAVA_HOME%/bin目录
- 执行命令
- 参数简要说明:“F:\tomcat.keystore”含义是将证书文件保存在F盘,证书文件名称是tomcat.keystore ;“-validity 36500”含义是证书有效期,单位是天,默认值90
- 在命令行填写必要的参数(jdk版本不同可能稍有不同):
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="/etc/tomcat.keystore" keystorePass="www.test.cn"/>
<Connector port="8009" enableLookups="false" protocol="AJP/1.3" redirectPort="8443" />
主要修改:1、去掉注释;2、增加keystoreFile和keystorePass两个参数,分别表示证书文件的路径和密码(之前申请证书时输入的tomcat密码)
注意事项:1、8443端口同时是上面http配置的8080端口的redirectPort,表示http请求会跳转到8443的https
2、8080、8009两个端口配置根据实际需求修改
3、网上有些文章提到https默认是443,tomcat是8443,这个具体有什么影响和特别需要注意的地方我尚未知,后续碰到再说
2.修改项目的web.xml文件,并强制https访问
在web应用的web.xml文件中修改并加上下面配置:
<!--强制使用https,http请求会自动转为https--> <login-config> <auth-method>CLIENT-CERT</auth-method> <realm-name>Client Cert Users-only Area</realm-name> </login-config> <!--配置网站支持https,/* 表示全部请求都走https, transport-guarantee 标签设置为 CONFIDENTIAL 以便使应用支持 SSL。 如果需要关闭 SSL ,将 CONFIDENTIAL 改为 NONE 即可--> <security-constraint> <web-resource-collection> <web-resource-name>securedapp</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint>
修改tomcat\conf\web.xml文件也可,对该tomcat下所有程序生效
(2) 、如果IE提示“安全证书上的名称无效或者与站点名称不匹配”,则是由生成证书时填写的服务器所在主机的域名“您的名字与姓氏是什么?”/“What is your first and last name?”不正确引起的
(3)、在一次改为https的改动实验后,改回http,将之前所有的改动都还原了,但是程序就是异常,能正常打开登录页面但是登录报错(由于程序逻辑的原因,没有任何有效的日志可以查看到该问题的原因),折腾了2个小时,后来清空了浏览器缓存重新登录就正常了,推测是缓存记录的是https的session,使用http访问后无法获取到session的有效信息。其实只需要另外一台电脑或者浏览器访问一下可能早就发现该原因了,坑爹。
(4)、如果需要在原端口上提供https服务,直接将8443端口改为原端口如8080,但是同一个端口无法同时提供http和https两种服务。且这样修改后,强制http跳转到https的配置也失效了,只能通过其他办法跳转,如使用Nginx等转发(尚未实验)
转载并修改至:http://blog.sina.com.cn/s/blog_618592ea01012q40.html
谢谢。
posted on 2019-04-11 16:56 parker_yu 阅读(12411) 评论(0) 编辑 收藏 举报