在Tomcat中启用HTTPS安全连接的配置方法
为确保应用通信的安全性,需在Apache Tomcat中正确配置SSL/TLS支持。以下是基于标准实践的完整设置流程,涵盖证书生成、服务端配置及流量重定向。
1. 创建自签名证书密钥库
使用Java内置的keytool工具创建一个JKS格式的密钥存储文件,用于存放服务器私钥与证书。
keytool -genkeypair -alias appserver -keyalg RSA -keysize 2048 -keystore /opt/tomcat/conf/ssl.keystore \
-validity 365 -dname "CN=localhost,OU=IT,O=Company,L=Beijing,C=CN" \
-storepass changeit -keypass changeit
> 说明:
> - -alias 指定别名,用于标识证书。
> - -keystore 定义密钥库路径(建议放置于Tomcat配置目录内)。
> - -storepass 和 -keypass 设置访问密码,推荐使用强密码。
> - -dname 提供证书主体信息,生产环境应填写真实域名。
2. 配置HTTP连接器以启用加密
修改Tomcat主配置文件conf/server.xml,添加或更新<Connector>元素,启用基于NIO的非阻塞协议并绑定到安全端口。
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="/opt/tomcat/conf/ssl.keystore"
certificateKeystorePassword="changeit"
certificateKeystoreType="JKS" />
</SSLHostConfig>
</Connector>
> 关键参数解释:
> - port:HTTPS默认端口,可自定义。
> - protocol:选择NIO模式提升并发性能。
> - SSLEnabled="true":激活SSL功能。
> - scheme="https" 和 secure="true":标记该连接为安全通道。
3. 强制客户端通过HTTPS访问
可通过两种方式实现:应用层控制或容器级拦截。 #### 方式一:通过web.xml声明安全约束(推荐) 在Web应用的WEB-INF/web.xml中加入以下内容,强制所有请求走加密通道。
<security-constraint>
<web-resource-collection>
<web-resource-name>Secure Area</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
#### 方式二:利用Valve进行请求重定向
若希望在服务器层面统一处理跳转,可在conf/server.xml中添加重写组件。
<Valve className="org.apache.catalina.valves.rewrite.RewriteValve"
internalRedirect="true">
<Rule>
<from>^http://localhost:8080/(.*)$</from>
<to type="redirect">https://localhost:8443/$1</to>
</Rule>
</Valve>
> 注意:需确保rewrite.jar已放入lib目录。
4. 启动服务并验证配置
完成配置后重启Tomcat:
./bin/shutdown.sh
./bin/startup.sh
随后访问https://localhost:8443,检查浏览器是否显示安全锁图标,并确认证书有效。