一、Tomcat 能不能自己做 HTTPS¶
原笔记给出的结论是:
- Tomcat 可以支持 HTTPS
- 可以直接在 Tomcat 中配置证书
但它也补充了一个实践建议:
- 生产中很多时候也会把证书放在 Nginx 上
- 让 Nginx 负责对外加密
- Tomcat 在后端继续跑 HTTP
也就是说,Tomcat 做 HTTPS 是完全可行的,只是未必总是最常见的生产方案。
二、Tomcat HTTPS 的核心思路是什么¶
无论是阿里云的 pfx 证书,还是华为云的 jks 证书,核心操作其实都集中在:
- 修改
server.xml - 增加一个
8443的Connector
原笔记在这里强调的关键字段包括:
SSLEnabled="true"scheme="https"secure="true"keystoreFilekeystorePass
只要这些项配置正确,Tomcat 就具备了处理 HTTPS 请求的能力。
三、阿里云 PFX 证书怎么配置¶
原笔记先准备了证书目录:
mkdir -p /app/tools/tomcat/cert
mv 11654958_www.harbor-local.cn_tomcat.zip tomcat.zip
unzip tomcat.zip -d /app/tools/tomcat/cert
然后读取证书密码文件:
cat /app/tools/tomcat/cert/pfx-password.txt
在 server.xml 中新增的关键配置如下:
<Connector port="8443" protocol="HTTP/1.1"
SSLEnabled="true"
scheme="https"
secure="true"
keystoreFile="/app/tools/tomcat/cert/www.harbor-local.cn.pfx"
keystoreType="PKCS12"
keystorePass="w2nt7odp"
clientAuth="false"
SSLProtocol="TLSv1.1+TLSv1.2+TLSv1.3"
ciphers="TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA256" />
这里最关键的点是:
keystoreFile指向.pfxkeystoreType="PKCS12"
写完后重启:
systemctl restart tomcat
ss -lntp | grep 8443
如果能看到 8443 监听,就说明 HTTPS 连接器已经生效。
四、JKS 证书配置和 PFX 有什么区别¶
原笔记指出,华为云的 jks 方案与阿里云 pfx 最大的区别主要是:
- 不需要
keystoreType="PKCS12"
示意写法如下:
<Connector port="8443" protocol="HTTP/1.1"
SSLEnabled="true"
scheme="https"
secure="true"
keystoreFile="/app/tools/tomcat/cert/www.harbor-local.cn.jks"
keystorePass="w2nt7odp"
clientAuth="false"
SSLProtocol="TLSv1.1+TLSv1.2+TLSv1.3"
ciphers="TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA256" />
所以可以把这两种证书的差异简单记成:
pfx:记得带PKCS12jks:一般去掉这类类型声明
五、为什么 8080 还要跳转到 8443¶
如果只配了 8443,用户仍然可能习惯访问:
http://域名:8080
这时如果希望统一引导到 HTTPS,就需要让 Tomcat 对普通访问做安全约束。
原笔记通过修改:
/app/tools/tomcat/conf/web.xml
来实现。
核心配置如下:
<login-config>
<auth-method>CLIENT-CERT</auth-method>
<realm-name>Client Cert Users-only Area</realm-name>
</login-config>
<security-constraint>
<web-resource-collection>
<web-resource-name>ssl</web-resource-name>
<url-pattern></url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
它表达的核心意思是:
- 对资源访问要求使用受保护的传输通道
- 也就是强制走 HTTPS
修改后再重启:
systemctl restart tomcat
六、访问测试时要注意什么¶
原笔记通过本地 hosts 先做了解析:
192.168.1.20 ssl.harbor-local.cn
然后浏览器访问:
https://ssl.harbor-local.cn:8443
这一步能验证:
- 域名和证书是否匹配
8443连接器是否工作正常- 浏览器是否能完成 HTTPS 握手
七、小结¶
Tomcat 配置 HTTPS 的核心,不在于记住所有 XML,而是先把路径理顺:
- 准备证书文件
- 在
server.xml中新增8443连接器 - 根据证书格式调整
keystore配置 - 需要时在
web.xml中把8080引导到 HTTPS
原笔记这一部分已经把 Tomcat 自身做 HTTPS 的主线覆盖得比较完整了。