如何在AWS上实现HTTP到HTTPS请求重定向?解决Spring服务适配问题
在AWS EC2上为Spring服务配置HTTPS解决跨协议调用问题
方案一:使用AWS应用负载均衡器(ALB)实现SSL终止(推荐)
这种方式无需修改Spring服务代码,由负载均衡器处理HTTPS加密,后端仍用HTTP通信,适合AWS新手。
申请SSL证书
- 登录AWS控制台,打开Certificate Manager(ACM),选择EC2实例所在的AWS区域。
- 点击「请求证书」,选择「公有证书」,输入你的域名(无域名可先为EC2弹性IP绑定域名后再申请)。
- 选择DNS验证方式,按照提示在域名解析服务商处添加指定DNS记录,完成验证后等待证书颁发。
创建应用负载均衡器(ALB)
- 进入EC2控制台「负载均衡器」页面,点击「创建负载均衡器」,选择「应用负载均衡器」。
- 基础配置:命名负载均衡器,选择「互联网面向」,VPC选EC2所在VPC,勾选至少两个可用区的子网。
- 安全设置:添加HTTPS监听(端口443),关联ACM申请的证书;可同时添加HTTP监听(端口80),设置转发到HTTPS 443端口实现自动跳转。
- 目标组:新建目标组,目标类型选「实例」,端口填8080,注册你的EC2实例,配置健康检查路径(如Spring服务的
/actuator/health,无健康端点则用/)。
配置安全组
- 编辑EC2实例的安全组,添加入站规则:允许来自ALB安全组的8080端口访问。
- 编辑ALB的安全组,添加入站规则:允许0.0.0.0/0的443(HTTPS)和80(HTTP)端口访问。
更新前端调用地址
将前端代码中调用Spring服务的地址,从EC2公网IP:8080替换为ALB的DNS名称(无需加端口,默认走443)。
方案二:直接在Spring服务中配置HTTPS
若不想使用负载均衡器,可直接在Spring Boot中启用HTTPS。
获取并转换SSL证书
- 用ACM申请证书后导出
.crt证书文件和.key私钥文件;或用Let's Encrypt生成免费证书。 - 使用OpenSSL将证书转换为Java支持的PKCS12格式:
执行时设置证书密码,后续配置会用到。openssl pkcs12 -export -in your-cert.crt -inkey your-private.key -out keystore.p12 -name spring-ssl
- 用ACM申请证书后导出
配置Spring Boot
在application.properties中添加以下配置:server.port=443 server.ssl.key-store=classpath:keystore.p12 server.ssl.key-store-password=你的证书密码 server.ssl.key-store-type=PKCS12 server.ssl.key-alias=spring-ssl部署与配置
- 将
keystore.p12放入Spring项目的src/main/resources目录,重新打包部署到EC2实例。 - 编辑EC2安全组,添加入站规则:允许0.0.0.0/0的443端口访问。
- 若需要HTTP自动跳转HTTPS,可在Spring中添加重定向配置,或在EC2上部署Nginx做反向代理。
- 将
注意事项
- ACM证书仅在申请的区域可用,若使用CloudFront需在us-east-1区域申请证书。
- 方案一的ALB方式更易维护,无需关注证书更新和Spring服务的SSL配置,适合长期运维。
- 若使用域名,确保域名已正确解析到ALB或EC2实例的公网IP/弹性IP。
内容的提问来源于stack exchange,提问作者Emiliano Quintero
相关产品推荐
相关产品推荐

