有时候安全考虑会要开启 Tomcat 的 https 协议访问,最快速的配置,两步
1. 创建 keystore 文件
执行 JDK 带的命令
keytool -genkey -alias tomcat -keyalg RSA
按命令提示各个信息即可,最后在用户主目录下创建了一个 .keystore 文件
2. 配置 Tomcat 使用 keystore 文件
打开 server.xml 找到下面被注释的这段
1 2 3 4 5 |
<!-- <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" /> --> |
去掉注释,加上 keystoreFile="/Users/unmi/.keystore" keystorePass="password"
, 最终内容为
1 2 3 4 |
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" 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 文件,增加配置如下:
1 2 3 4 5 6 7 8 9 |
<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> |
比如应用上下文是 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
[版权声明] 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。
[…] Tomcat 中可以开启 SSL,用 HTTPS 来访问,见前一篇 快速启用 Tomcat 的 HTTPS 协议访问,不过更接近实际的应用是 Tomcat 只担当 Servlet 容器,HTTPS […]