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

EC2 Tomcat搭配ELB的SSL证书问题:无法自定义域名时如何对齐

问题翻译

我在EC2上部署了Tomcat服务器,搭配应用负载均衡器(ELB),需要提供TLS加密。该Tomcat承载的应用通过自定义域名www.mydomain.com/somebusiness访问。我已在ELB上安装了AWS提供的证书,但443端口到Tomcat服务器的流量无法使用该AWS证书,因此需要为Tomcat单独配置另一张证书。我尝试使用自签名证书,但持续收到"您的连接不是私密连接,攻击者可能试图窃取您的信息……"的提示,因此转而使用CA签名证书,希望解决该问题。但真正的问题随之而来:我的证书是针对www.mydomain.com颁发的,安装到ELB后,ELB仍使用https://blappity.amazon.aws.com这个DNS名称,导致证书因域名不匹配而验证失败。由于不可避免的原因,我无法为负载均衡器设置自定义DNS名称,这也排除了使用Route 53的可能。在此情况下,我该如何将自定义域名与ELB对齐?


解决方案

核心思路:拆分TLS加密链路

既然无法给ELB配置自定义域名,要解决证书不匹配问题,必须调整加密链路的分工:让ELB负责处理外部用户的TLS验证,Tomcat只处理内部流量的加密(或明文传输),避免两端证书域名冲突。

1. 配置ELB终止外部TLS

  • 保留ELB上针对www.mydomain.com的AWS证书,确保ELB的HTTPS(443端口)监听使用该证书。
  • 配置ELB的监听规则:将www.mydomain.com/somebusiness的请求转发到Tomcat所在的目标组,转发协议根据需求选择以下两种方案。

2. 两种Tomcat侧配置方案

方案A:ELB到Tomcat用HTTP(简单高效)

  • 修改Tomcat的server.xml,确保Connector监听8080端口(HTTP协议),无需配置SSL相关内容:
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"/>
    
  • 配置EC2安全组:允许ELB所在的安全组访问8080端口。
  • 优势:无需维护Tomcat证书,配置简单,VPC内部流量安全性足够(私有子网内传输)。

方案B:ELB到Tomcat用内部TLS(合规要求场景)

  • 生成针对EC2私有IP或内部域名(如ip-10-0-0-1.ec2.internal)的自签证书:
    keytool -genkeypair -alias tomcat-internal -keyalg RSA -keysize 2048 -storetype PKCS12 -keystore tomcat-internal.p12 -validity 3650 -dname "CN=ip-10-0-0-1.ec2.internal, OU=Internal, O=MyOrg, L=City, ST=State, C=US"
    
  • 修改Tomcat的server.xml,添加HTTPS Connector:
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true">
        <SSLHostConfig>
            <Certificate certificateKeystoreFile="conf/tomcat-internal.p12"
                         type="RSA" certificateKeystorePassword="你的证书密码"/>
        </SSLHostConfig>
    </Connector>
    
  • 配置ELB目标组:将协议改为HTTPS,端口设为8443,开启TLS验证并导入自签证书的CA根证书(从tomcat-internal.p12中导出)。
  • 配置EC2安全组:允许ELB访问8443端口。
  • 优势:ELB到Tomcat的流量加密,满足合规要求,且浏览器不会感知内部自签证书(只和ELB验证证书)。

问题根源说明

你之前的错误在于:把针对www.mydomain.com的证书装到Tomcat后,ELB用自身域名blappity.amazon.aws.com请求Tomcat,导致Tomcat返回的证书域名与请求域名不匹配,触发验证失败。拆分加密链路后,外部用户只和ELB验证www.mydomain.com的证书,ELB和Tomcat之间用适配内部场景的证书或明文,彻底规避域名冲突问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 05:25:27