所有部署指南 部署

AWS 上的 SSL 证书(ACM、EC2、ALB、CloudFront)

AWS 提供多种添加 HTTPS 的方式,具体取决于你的架构。正确的方法取决于你是否使用负载均衡器、CloudFront 还是独立的 EC2 实例。

决策树

Are you using an ALB, NLB, or CloudFront?
├── Yes → Use AWS Certificate Manager (ACM) — free, auto-renewing
└── No (standalone EC2)?
    ├── Can you install Certbot? → Certbot on EC2 (auto-renewing)
    └── No root / quick setup? → GetHTTPS → manual install on EC2

方案一:AWS Certificate Manager (ACM) — 用于负载均衡器和 CloudFront

ACM 提供免费的 SSL 证书并自动续签。它们只能与 AWS 服务(ALB、NLB、CloudFront、API Gateway)配合使用——你无法下载私钥。

申请证书

  1. 在控制台中打开 AWS Certificate Manager
  2. 点击 Request a certificateRequest a public certificate
  3. 输入你的域名:example.com*.example.com
  4. 选择验证方式:DNS validation(推荐)或 Email
  5. 点击 Request

DNS 验证

ACM 会给你一条需要添加到 DNS 的 CNAME 记录:

  • Name: _xxxx.example.com
  • Value: _yyyy.acm-validations.aws

如果你的 DNS 托管在 Route 53,点击 “Create records in Route 53”——ACM 会自动添加。

绑定到 ALB

  1. 前往 EC2 → Load Balancers → 选择你的 ALB
  2. Listeners 标签 → 添加监听器(或编辑现有的)
  3. 协议:HTTPS,端口:443
  4. 默认操作:转发到你的目标组
  5. Default SSL/TLS certificate: 选择你的 ACM 证书
  6. 保存

绑定到 CloudFront

  1. 前往 CloudFront → 选择你的分配
  2. General 标签 → Edit
  3. Custom SSL certificate: 选择你的 ACM 证书(必须在 us-east-1
  4. 保存

方案二:EC2 上的 Let’s Encrypt(独立实例)

如果你运行的是没有负载均衡器的单个 EC2 实例,直接在服务器上安装证书。

使用 GetHTTPS(无需安装软件)

  1. GetHTTPS 获取证书
  2. 将文件上传到你的 EC2 实例:
    scp fullchain.pem privkey.pem ec2-user@your-ec2-ip:/etc/ssl/
  3. 在实例上配置 NginxApache

使用 Certbot(自动续签)

# Amazon Linux 2023
sudo dnf install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com

# Ubuntu on EC2
sudo snap install --classic certbot
sudo certbot --nginx -d example.com

Certbot 会自动设置续签。

ACM 与 Let’s Encrypt 在 AWS 上的对比

ACMLet’s Encrypt (GetHTTPS/Certbot)
费用免费免费
适用于 ALB/CloudFront❌ (无法轻松导入 LE 到 ACM)
适用于 EC2 直接部署
自动续签✅ (AWS 托管)✅ (Certbot) 或手动 (GetHTTPS)
私钥访问❌ (AWS 持有)✅ (你持有)
通配符证书
非 AWS 用途✅ (可移植)

经验法则: ALB 或 CloudFront 后面用 ACM。独立 EC2 实例用 Let’s Encrypt。

安全组配置

确保你的 EC2 或 ALB 安全组允许端口 80 和 443 的入站流量:

Type        Protocol  Port  Source
HTTP        TCP       80    0.0.0.0/0
HTTPS       TCP       443   0.0.0.0/0

端口 80 用于 HTTP→HTTPS 重定向以及 Let’s Encrypt HTTP-01 验证。

常见问题

可以直接在 EC2 上使用 ACM 证书吗?

不可以。ACM 证书只能附加到 AWS 托管服务(ALB、NLB、CloudFront、API Gateway)。你无法导出私钥。独立 EC2 请使用 GetHTTPS 或 Certbot。

可以将 Let’s Encrypt 证书导入 ACM 吗?

技术上可以(aws acm import-certificate),但不会通过 ACM 自动续签。你需要每 90 天重新导入一次。使用 ACM 原生证书配合 AWS 服务、使用 Let’s Encrypt 配合 EC2 会更简单。

ACM 证书应该选哪个 AWS 区域?

ALB/NLB:在与负载均衡器相同的区域申请证书。CloudFront:证书必须us-east-1(弗吉尼亚北部),不论你的源站在哪里。

ACM 真的免费吗?

是的。ACM 的公共 SSL/TLS 证书免费。每个证书不收费,续签也不收费。你只需为使用证书的 AWS 资源(ALB、CloudFront 等)付费。

如何为 ECS/Fargate 服务配置 SSL?

在 ECS 服务前放置一个 ALB,然后将 ACM 证书附加到 ALB 监听器。ALB 终结 TLS 并将 HTTP 转发到你的容器。这是 ECS 的标准模式。

如何为 S3 静态网站配置 SSL?

S3 静态网站托管不直接支持自定义 SSL 证书。在 S3 前面放置 CloudFront,并将 ACM 证书(来自 us-east-1)附加到 CloudFront 分配。

API Gateway 怎么处理?

AWS API Gateway 在 *.execute-api.region.amazonaws.com 上默认包含免费 SSL。对于自定义域名(如 api.example.com),创建 ACM 证书并在 API Gateway 中配置自定义域名。

在 AWS 上应该用 ACM 还是 GetHTTPS?

场景推荐方案
ALB / NLB / CloudFrontACM — 免费、自动续签、原生集成
独立 EC2GetHTTPS 或 Certbot — ACM 无法导出密钥到 EC2
ALB 后面的 EC2ACM 用于 ALB — EC2 不需要自己的证书
ECS / FargateACM 用于 ALB — 标准模式
LightsailLightsail 内置 — 包含免费 Let’s Encrypt

如果你在纯 EC2 上没有负载均衡器,GetHTTPS 是获取证书最快的方式——无需 AWS CLI。

相关文章

快速开始 2026-05-08
如何获取免费 SSL 证书(分步指南)
5 分钟从 Let's Encrypt 获取免费 SSL 证书 — 无需安装软件、无需注册账号。涵盖 4 种方法、两种验证方式、6 个平台的安装教程和故障排除。
部署 2026-05-08
如何在 Nginx 上安装 SSL 证书
在 Nginx 上安装 SSL 证书的分步指南。涵盖文件上传、完整 server 块配置、TLS 最佳实践、HTTP/2、HSTS、重定向设置、测试以及 6 个常见错误的排查方法。
部署 2026-05-08
Docker 与反向代理的 SSL 证书配置
为 Docker 容器配置 HTTPS:使用 Nginx 反向代理、Traefik 自动获取 Let's Encrypt 证书,或手动挂载证书。
在浏览器中获取免费 SSL 证书
无需安装,无需账号。私钥始终留在你的设备上。
获取证书