快速启用 Tomcat 的 HTTPS 协议访问

有时候安全考虑会要开启 Tomcat 的 https 协议访问,最快速的配置,两步

1. 创建 keystore 文件

执行 JDK 带的命令

keytool -genkey -alias tomcat -keyalg RSA

按命令提示各个信息即可,最后在用户主目录下创建了一个 .keystore 文件

2. 配置 Tomcat 使用 keystore 文件

打开 server.xml 找到下面被注释的这段

去掉注释,加上 keystoreFile="/Users/unmi/.keystore" keystorePass="password" , 最终内容为

启动 Tomcat 并访问 https://localhost:8443. 当你看到 Tomcat 默认的首页就表示配置成功的。

如果你希望用户输入 https://localhost 就能访问 Tomcat,即使用 443 端口,必须把上面的 8443 替换成 443。还需注意需系统管理员权限来启动 Tomcat,因为端口号小于 1024。

同时也可以用 8080 端口访问,可以在自己的应用关键部分只允许 HTTPS 访问来控制安全性。


如果要强制使用 HTTPS 来访问某个应用,那么就在应用的 web.xml 中加上如下配置

4. 配置应用使用 SSL

打开应用的 web.xml 文件,增加配置如下:

比如应用上下文是 unmi,这样你在访问 http://localhost:8080/unmi 时会重定向到 https://localhost:8443/unmi 去。

如想 Tomcat 下所有的应用都须通过 HTTPS 来访问,就把上面的内容加到全局的 conf/web.xml 中去。

把 CONFIDENTIAL 改为 NONE 即可关闭 SSL。

实际应用中一般在 Apache 这一层启用 HTTPS, Apache 与 Tomcat 间的通信会通过下面某一种

Java HTTP Connector: http://tomcat.apache.org/tomcat-8.0-doc/config/http.html (blocking & non-blocking)
Java AJP  Connector: http://tomcat.apache.org/tomcat-8.0-doc/config/ajp.html
APR (HTTP/AJP) Connector: http://tomcat.apache.org/tomcat-8.0-doc/apr.html

Apache 下配置 SSl 要复杂些,不是用 keytool, 而一般要用到 openssl。Tomcat 下配置也能用 openssl 来生成证书,就不用在 server.xml 中写明文密码了,更多说明参考官方文档 SSL Configuration HOW-TO

以上办法适用于 Tomcat 6, 7, 8,用到的是 NIO org.apache.coyote.http11.Http11NioProtocol,更早的 Tomcat 版本也类同,未测。只记得曾经在 Tomcat 4 下配置过 SSL,再没更多的记忆了。

参考:1. SSL Configuration HOW-TO

本文链接 https://yanbin.blog/enable-tomcat-https-protocol/, 来自 隔叶黄莺 Yanbin Blog

[版权声明] Creative Commons License 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。

Subscribe
Notify of
guest

1 Comment
Inline Feedbacks
View all comments
trackback

[…] Tomcat 中可以开启 SSL,用 HTTPS 来访问,见前一篇 快速启用 Tomcat 的 HTTPS 协议访问,不过更接近实际的应用是 Tomcat 只担当 Servlet 容器,HTTPS […]