温馨提示×

Tomcat在CentOS中的SSL证书如何安装

小樊
46
2025-12-29 06:50:29
栏目: 云计算

在 CentOS 上为 Tomcat 安装 SSL 证书

一 准备与前置检查

  • 环境:CentOS 7/8/9,Tomcat 8.5/9,已安装 JDK 并配置好 JAVA_HOME
  • 证书:从证书服务商下载服务器类型为 Tomcat 的证书包(常见为 PFX/PKCS12,部分也提供 JKS;同时会提供 .txt 密码文件,且每次下载密码可能不同)。
  • 域名与网络:证书绑定的域名已正确 DNS 解析 到服务器;服务器防火墙与云厂商安全组已放行 TCP 443;若网站在 中国内地,需完成 ICP 备案
  • 连接测试:本地可用 ping yourdomain 验证解析;服务器上可用 ss -tlnp | grep ':443'nc -vz yourdomain 443 检查端口连通性。

二 安装步骤

  1. 上传证书
    • 将证书文件(如 domain.pfxdomain.jks)与 密码文件 上传到 Tomcat 配置目录,例如 $CATALINA_HOME/conf/ 或新建 $CATALINA_HOME/conf/cert/
  2. 编辑 server.xml
    • 打开 $CATALINA_HOME/conf/server.xml
    • 启用 HTTP→HTTPS 跳转(端口 80 的 Connector):
      <Connector port="80" protocol="HTTP/1.1"
                 connectionTimeout="20000"
                 redirectPort="443" />
      
    • 配置 HTTPS Connector 使用 443(推荐 NIO 模式):
      • 使用 PFX/PKCS12(多数证书包为此格式):
        <Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
                   maxThreads="150" SSLEnabled="true">
          <SSLHostConfig>
            <Certificate certificateKeystoreFile="conf/domain.pfx"
                         certificateKeystorePassword="YourPfxPassword"
                         certificateKeystoreType="PKCS12" />
          </SSLHostConfig>
        </Connector>
        
      • 使用 JKS(如你自行转换或证书商直接提供):
        <Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
                   maxThreads="150" SSLEnabled="true">
          <SSLHostConfig>
            <Certificate certificateKeystoreFile="conf/domain.jks"
                         certificateKeystorePassword="YourJksPassword"
                         type="RSA" />
          </SSLHostConfig>
        </Connector>
        
      • 若此前存在 AJP Connector,将其 redirectPort 改为 443
        <Connector protocol="AJP/1.3" address="::1" port="8009" redirectPort="443" />
        
  3. 可选 全站 HTTP 自动跳转 HTTPS
    • $CATALINA_HOME/conf/web.xml<web-app> 结束标签前加入:
      <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>
      
  4. 重启 Tomcat
    $CATALINA_HOME/bin/shutdown.sh
    $CATALINA_HOME/bin/startup.sh
    
    或使用 systemd:sudo systemctl restart tomcat(按你的实际服务名调整)。

三 验证与常见问题

  • 验证
    • 访问 https://yourdomain(默认端口 443 无需加端口),浏览器地址栏出现 锁形图标 表示成功;也可使用 curl -Iv https://yourdomain 查看证书链与握手信息。
  • 常见问题与排查
    • 端口未放行:在云安全组与系统防火墙(firewalld/iptables)放行 443/TCP;用 ss -tlnp | grep ':443'nc -vz yourdomain 443 复核。
    • 密码错误:PFX/JKS 的 密码文件与证书一一对应,重新下载会生成新密码,需同步更新配置。
    • 证书格式不匹配:若拿到的是 PEM 证书链 + 私钥,可转换为 PKCS12 再配置:
      openssl pkcs12 -export \
        -in server.crt -inkey server.key \
        -out domain.pfx -name tomcat \
        -CAfile chain.crt -caname root
      
      然后在 Connector 中使用 certificateKeystoreType="PKCS12" 指向该 .pfx
    • HTTP 未跳转:确认 80 端口 Connector 的 redirectPort=443 已设置,且应用或 web.xml<transport-guarantee>CONFIDENTIAL</transport-guarantee> 生效。
    • 域名不匹配或证书未签发:证书需对访问域名有效(含精确域名与通配符匹配规则),状态需为 已签发

四 进阶与可选方案

  • APR/OpenSSL 引擎(可选):若追求更高性能,可启用 APR 模式并配置本地 OpenSSL,示例:
    <Connector port="443" protocol="org.apache.coyote.http11.Http11AprProtocol"
               maxThreads="150" SSLEnabled="true">
      <SSLHostConfig>
        <Certificate certificateKeyFile="conf/server.key"
                     certificateFile="conf/server.crt"
                     certificateChainFile="conf/chain.crt"
                     type="RSA" />
      </SSLHostConfig>
    </Connector>
    
    需安装 tomcat-native 与 OpenSSL 依赖,按官方文档编译启用。
  • 使用 RewriteValve 做跳转(可选):在 server.xml<Host> 内加入重写阀并配置规则,可实现更灵活的跳转逻辑(适合复杂场景)。

0