Ubuntu Tomcat SSL证书配置方法
导读:Ubuntu 上 Tomcat 启用 SSL 证书的标准做法 一 准备证书与选择存储格式 自签名证书(仅测试) 生成私钥与证书:sudo openssl req -x509 -nodes -days 365 -newkey rsa:2...
Ubuntu 上 Tomcat 启用 SSL 证书的标准做法
一 准备证书与选择存储格式
- 自签名证书(仅测试)
- 生成私钥与证书:sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/tomcat-selfsigned.key -out /etc/ssl/certs/tomcat-selfsigned.crt
- CA 签发证书(生产推荐)
- 常见文件:certificate.crt(服务器证书)、private.key(私钥)、ca_bundle.crt(中间证书链)
- 合并为 PKCS#12(推荐直接使用,无需再转 JKS):
- openssl pkcs12 -export -in certificate.crt -inkey private.key -out keystore.p12 -name tomcat -cafile ca_bundle.crt -caname root -chain
- 说明:Tomcat 支持 PKCS#12,可直接作为 keystore 使用,避免不必要的 JKS 转换与潜在错误。
二 配置 Tomcat 的 HTTPS 连接器
- 文件路径:编辑 /etc/tomcat9/server.xml(Tomcat 8.5/9 语法)
- 推荐做法(PKCS#12)
- 将生成的 keystore.p12 放到例如 /etc/ssl/private/keystore.p12
- 在 内添加或修改 :
< Connector port="443" protocol="org.apache.coyote.http11.Http11Nio2Protocol" maxThreads="150" SSLEnabled="true" defaultSSLHostConfigName="your.domain"> < SSLHostConfig hostName="your.domain"> < Certificate certificateKeystoreFile="/etc/ssl/private/keystore.p12" certificateKeystorePassword="YourP12Password" certificateKeyAlias="tomcat" type="RSA"/> < /SSLHostConfig> < /Connector> - 说明:端口 443 为默认 HTTPS 端口;如仅测试可用 8443。证书链需包含在 PKCS#12 中(通过 -cafile 导入)。
- 备选做法(JKS,适用于已有 JKS 的场景)
< Connector port="443" protocol="org.apache.coyote.http11.Http11Nio2Protocol" maxThreads="150" SSLEnabled="true" defaultSSLHostConfigName="your.domain"> < SSLHostConfig hostName="your.domain"> < Certificate certificateKeystoreFile="conf/ssl/yourdomain.jks" certificateKeystorePassword="YourJKSPassword" type="RSA"/> < /SSLHostConfig> < /Connector>- 说明:Tomcat 8.5/9 使用 与 Certificate 子元素;旧写法(keystoreFile/keystorePass 直接写在 Connector 上)已不推荐。
三 强制 HTTP 跳转 HTTPS
- 应用层约束(推荐,通用)
- 在 /etc/tomcat9/web.xml 的 之后添加:
< 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> - 同时将 HTTP Connector 的 redirectPort 指向 443(或你的 HTTPS 端口)。
- 在 /etc/tomcat9/web.xml 的 之后添加:
- Valve 方式(可选,需前置反向代理或正确 RemoteIp 配置)
- 在 内添加:
< Valve className="org.apache.catalina.valves.RemoteIpValve" remoteIpHeader="x-forwarded-for" protocolHeader="x-forwarded-proto"/> < Valve className="org.apache.catalina.valves.HttpRedirectValve" scheme="https" secure="true" port="443"/> - 说明:若 Tomcat 前有反向代理(如 Nginx/Apache)处理 TLS,请优先在代理层跳转,减少 Tomcat 端复杂度。
- 在 内添加:
四 启动与验证
- 重启服务:sudo systemctl restart tomcat9
- 访问验证
- 直接访问:https://your_domain_or_ip/(若使用 443 可直接用域名)
- 自签名证书浏览器会提示不受信任;CA 证书应显示锁标识且链完整。
- 常见问题排查
- 证书链不完整:确保 ca_bundle.crt 已合并进 PKCS#12(生成时加 -cafile)
- 端口未放行:sudo ufw allow 443/tcp(或你的 HTTPS 端口)
- 权限问题:确保 keystore.p12 对 tomcat 运行用户可读(如 640,属 tomcat:tomcat)
- 配置未生效:检查 server.xml 中 Connector 是否被注释;确认 的 hostName 与访问域名匹配(或使用通配/默认)。
五 进阶 双向认证 mTLS(可选)
- 准备客户端证书(由同一 CA 签发),并在服务器端配置信任库:
< Connector port="443" protocol="org.apache.coyote.http11.Http11Nio2Protocol" maxThreads="150" SSLEnabled="true" defaultSSLHostConfigName="your.domain"> < SSLHostConfig hostName="your.domain"> < Certificate certificateKeystoreFile="/path/server.p12" certificateKeystorePassword="serverpass" certificateKeyAlias="tomcat" type="RSA"/> < Certificate certificateKeystoreFile="/path/truststore.p12" certificateKeystorePassword="trustpass" type="RSA" truststore="true"/> < /SSLHostConfig> < /Connector> - 关键属性:设置 clientAuth=“true”,并指定 truststoreFile/truststorePass 指向存放客户端 CA 的信任库;客户端需安装其证书与私钥以完成握手。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu Tomcat SSL证书配置方法
本文地址: https://pptw.com/jishu/784960.html
