Web服务器启用HTTPS的配置方法
本文于2016年3月完成,发布在个人博客网站上。 考虑个人博客因某种原因无法修复,于是在博客园安家,之前发布的文章逐步搬迁过来。
nginx的配置方法
可以参考Jerry Qu的本博客 Nginx 配置之完整篇。
Tomcat的配置方法
以Java语言实现的Connector为例,介绍配置方法。
创建证书
-
Windows下,可以在CMD下执行命令
"%JAVA_HOME%\bin\keytool" -genkey -alias tomcat -keyalg RSA -keystore tomcat.key -
Unix下,可以在shell下执行命令
$JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA -keystore tomcat.key
keytool提示输入口令时,输入changeit
;然后按照要求输入其它信息,证书信息会生成到tomcat.key
文件中。
注意,这里输入的口令可以不是changeit
,但具体值需要和Connector配置中的keyPass
,keystorePass
保持一致,否则Tomcat启动后会报错提示无法加载证书文件。
关于证书,这是一个很大的话题,涉及范围很广,而Jackie其实一直以来并没有搞的很清楚,所以此处就不献丑了。
配置Connector
对于Apache Tomcat
的7.0.X版本,修改$CATALINA_BASE/conf/server.xml
中定义的Connector,增加HTTPS通道的定义,样例如下:
<!-- HTTP通道,跳转至8443端口 --> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <!-- HTTPS通道 --> <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" URIEncoding="UTF-8" SSLEnabled="true" secure="true" scheme="https" clientAuth="false" keystoreFile="conf/tomcat.key" keyPass="changeit" keystorePass="changeit" > </Connector>
对于Apache Tomcat
的9.0.X版本,与7.0.x版本的配置方法稍有不同,但同样需要修改$CATALINA_BASE/conf/server.xml
中定义的Connector,样例如下:
<!-- HTTP通道,跳转至8443端口 --> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <!-- HTTPS通道 --> <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" URIEncoding="UTF-8" SSLEnabled="true" scheme="https" secure="true" > <SSLHostConfig> <Certificate certificateKeystoreFile="conf/tomcat.key" certificateValidation="false" certificateKeyPassword="changeit" certificateKeystorePassword="changeit" type="RSA" /> </SSLHostConfig> </Connector>
样例中配置了明文的口令,显然并不安全,存在安全上的漏洞。
解决的方法如下:
- 使用安全且可逆的加密算法生成密文;
- 修改tomcat相关的源码,使用加密算法还原得到明文,然后使用明文来加载证书。
过程并不复杂,可以参考tomcat安全配置之证书密码加密存储。
配置应用
修改应用的web.xml文件,增加如下配置
<session-config> <cookie-config> <!-- <http-only>true</http-only> --> <!-- 设置Cookie对浏览器加载的脚本不可见,默认值为true,因此无需配置 --> <secure>true</secure> <!-- 设置Cookie使用HTTPS方式传递 --> </cookie-config> <session-config> <security-constraint> <web-resource-collection> <web-resource-name>SSL</web-resource-name> <url-pattern>/*</url-pattern> <!-- 对于应用的所有URL都要求使用HTTPS方式访问 --> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint>
当然可以依据实际情况调整样例中对URL的控制范围。
官网的参考资料
- Apache Tomcat 7 SSL/TLS Configuration HOW-TO
- Apache Tomcat 7 The HTTP Connector
- Apache Tomcat 9 SSL/TLS Configuration HOW-TO
- Apache Tomcat 9 The HTTP Connector
- The Java EE 6 Tutorial Specifying Security Constraints
关于HTTPS的阅读材料
百度的HTTPS实践
百度目前已实现全站启用HTTPS,来自百度运维部主页的如下文章记录了百度技术人员的实践经验,非常值得一读。
- 全站 https 时代的号角 : 大型网站的 https 实践系列
- 大型网站的 HTTPS 实践(1):HTTPS 协议和原理
- 大型网站的 HTTPS 实践(2):HTTPS 对性能的影响
- 大型网站的 HTTPS 实践(3):基于协议和配置的优化
- 大型网站的 HTTPS 实践(4):协议层以外的实践
Jerry Qu的分享
Jerry Qu的博客是一个好地方,有很多前端的资料,值得拜读。
其它资料
- HTTPS是如何保证连接安全:每位Web开发者都应知道的,原文
- 图解HTTPS
- Qualys SSL Labs的SSL Server Test工具
本文来自博客园,作者:jackieathome,转载请注明原文链接:https://www.cnblogs.com/jackieathome/p/17936488.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南