快速启用 Tomcat 的 HTTPS 协议访问
有时候安全考虑会要开启 Tomcat 的 https 协议访问,最快速的配置,两步
1. 创建 keystore 文件
执行 JDK 带的命令
2. 配置 Tomcat 使用 keystore 文件
打开 server.xml 找到下面被注释的这段
如果你希望用户输入
同时也可以用 8080 端口访问,可以在自己的应用关键部分只允许 HTTPS 访问来控制安全性。
如果要强制使用 HTTPS 来访问某个应用,那么就在应用的 web.xml 中加上如下配置
4. 配置应用使用 SSL
打开应用的 web.xml 文件,增加配置如下:
如想 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
1. 创建 keystore 文件
执行 JDK 带的命令
keytool -genkey -alias tomcat -keyalg RSA按命令提示各个信息即可,最后在用户主目录下创建了一个 .keystore 文件
2. 配置 Tomcat 使用 keystore 文件
打开 server.xml 找到下面被注释的这段
<!--
<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" , 最终内容为<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 文件,增加配置如下:
<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