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)配合使用——你無法下載私鑰。
申請證書
- 在控制檯中開啟 AWS Certificate Manager
- 點選 Request a certificate → Request a public certificate
- 輸入你的域名:
example.com、*.example.com - 選擇驗證方式:DNS validation(推薦)或 Email
- 點選 Request
DNS 驗證
ACM 會給你一條需要新增到 DNS 的 CNAME 記錄:
- Name:
_xxxx.example.com - Value:
_yyyy.acm-validations.aws
如果你的 DNS 託管在 Route 53,點選 “Create records in Route 53”——ACM 會自動新增。
繫結到 ALB
- 前往 EC2 → Load Balancers → 選擇你的 ALB
- Listeners 標籤 → 新增監聽器(或編輯現有的)
- 協議:HTTPS,埠:443
- 預設操作:轉發到你的目標組
- Default SSL/TLS certificate: 選擇你的 ACM 證書
- 儲存
繫結到 CloudFront
- 前往 CloudFront → 選擇你的分配
- General 標籤 → Edit
- Custom SSL certificate: 選擇你的 ACM 證書(必須在
us-east-1) - 儲存
方案二:EC2 上的 Let’s Encrypt(獨立例項)
如果你執行的是沒有負載均衡器的單個 EC2 例項,直接在伺服器上安裝證書。
使用 GetHTTPS(無需安裝軟體)
- 從 GetHTTPS 獲取證書
- 將檔案上傳到你的 EC2 例項:
scp fullchain.pem privkey.pem ec2-user@your-ec2-ip:/etc/ssl/ - 在例項上配置 Nginx 或 Apache
使用 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 上的對比
| ACM | Let’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 / CloudFront | ACM — 免費、自動續簽、原生整合 |
| 獨立 EC2 | GetHTTPS 或 Certbot — ACM 無法匯出金鑰到 EC2 |
| ALB 後面的 EC2 | ACM 用於 ALB — EC2 不需要自己的證書 |
| ECS / Fargate | ACM 用於 ALB — 標準模式 |
| Lightsail | Lightsail 內建 — 包含免費 Let’s Encrypt |
如果你在純 EC2 上沒有負載均衡器,GetHTTPS 是獲取證書最快的方式——無需 AWS CLI。