You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过域名让EC2上的Tomcat应用支持HTTPS连接?

解决EC2上Tomcat的HTTPS配置问题

针对你的情况,有两种主流方案可以解决,具体选择取决于你的部署需求:

方案一:让Tomcat直接处理HTTPS(需要转换证书格式)

你购买的PositiveSSL证书通常会提供 .crt(证书文件)、.key(私钥文件)、.ca-bundle(根证书链)这类文件,Tomcat无法直接识别,需要转换成它支持的PKCS12或JKS格式,推荐用PKCS12(更通用):

  1. 转换证书为PKCS12格式
    用openssl命令把证书和私钥打包成PKCS12文件(确保EC2上已安装openssl):

    openssl pkcs12 -export -in certificate.crt -inkey private.key -out keystore.p12 -name tomcat -CAfile ca-bundle.crt -caname root
    

    执行时会要求设置一个密码,务必记住这个密码,后续配置要用到。

  2. 修改Tomcat的server.xml配置
    替换原来443端口的<Connector>配置,指定PKCS12密钥库的路径、类型和密码:

    <Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true"
               maxParameterCount="1000">
        <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
        <SSLHostConfig>
            <Certificate certificateKeystoreFile="path/to/keystore.p12"
                         certificateKeystoreType="PKCS12"
                         certificateKeystorePassword="你设置的密码"
                         type="RSA" />
        </SSLHostConfig>
    </Connector>
    

    注意把path/to/keystore.p12替换成实际路径,比如放在Tomcat的conf目录下就写conf/keystore.p12。

  3. 验证配置
    重启Tomcat,用netstat -tulpn | grep 443确认443端口正常监听,然后测试HTTPS连接。

方案二:用反向代理处理HTTPS(推荐,更灵活)

让Nginx或CDN(比如你设置CNAME的服务商)来处理HTTPS加密,后端Tomcat继续用HTTP运行,这种方式更适合后续扩展(比如加负载均衡、静态资源缓存):

以Nginx为例:

  1. 安装Nginx并放置证书
    把PositiveSSL的证书文件(certificate.crt、private.key、ca-bundle.crt)放到Nginx的证书目录,比如/etc/nginx/ssl/。

  2. 配置Nginx反向代理
    编辑Nginx的虚拟主机配置文件:

    # 把HTTP请求重定向到HTTPS
    server {
        listen 80;
        server_name your-domain.com;
        return 301 https://$server_name$request_uri;
    }
    
    # 处理HTTPS请求,转发到Tomcat的HTTP端口
    server {
        listen 443 ssl;
        server_name your-domain.com;
    
        ssl_certificate /etc/nginx/ssl/certificate.crt;
        ssl_certificate_key /etc/nginx/ssl/private.key;
        ssl_trusted_certificate /etc/nginx/ssl/ca-bundle.crt;
    
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers HIGH:!aNULL:!MD5;
    
        location / {
            proxy_pass http://localhost:80;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
    
  3. 重启Nginx
    完成配置后重启Nginx,确保Tomcat的80端口只监听本地(可选,更安全),然后测试HTTPS连接。

额外排查点

  • 确认EC2安全组已开放443端口的入站规则(如果是方案一),或者开放80/443端口(方案二)。
  • 如果用了CDN服务商(比如设置CNAME的平台),检查CDN的SSL模式是否设置为「完全」或「严格」,同时确保CDN能正常访问EC2的80端口。
  • 核对证书的域名是否与你的访问域名完全匹配,避免出现域名不匹配的错误。

内容的提问来源于stack exchange,提问作者Nanor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 15:44:52