Ubuntu Tomcat SSL证书配置方法

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-selfsign

UbuntuTomcat 启用 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 端口)。
  • 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.p12tomcat 运行用户可读(如 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 的信任库;客户端需安装其证书与私钥以完成握手。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 55@qq.com 举报,一经查实,本站将立刻删除。转转请注明出处:https://www.szhjjp.com/n/1482672.html

(0)
派派
上一篇 2025-12-30
下一篇 2025-12-30

发表回复

登录后才能评论