Logo

新人日誌

首頁關於我部落格

新人日誌

Logo

網站會不定期發佈技術筆記、職場心得相關的內容,歡迎關注本站!

網站
首頁關於我部落格
部落格
分類系列文

© 新人日誌. All rights reserved. 2020-present.

本文為「新手也看得懂的 DNS 網域解析」系列第 4 篇

AWS Certificate Manager 是什麼?SSL 憑證自動化管理與最佳實踐

最後更新:2025年6月26日架構

現在用 AWS 架設網站越來越普遍,但想讓網站安全上線、支援 HTTPS,卻常常讓人卡關。

你可能聽過 SSL 憑證、HTTPS 加密,也知道網站要能被大家安全瀏覽,這些東西都少不了。

不過,傳統安裝 SSL 憑證的流程又長又繁瑣,還要自己處理續期、驗證、設定檔,對新手來說真的很麻煩。

幸好 AWS 提供了 Certificate Manager(ACM),幫你把這些複雜的事情全自動化,讓你不用再為憑證煩惱。

這篇文章會帶你一步步了解:

  • SSL 憑證是什麼?為什麼網站一定要有?
  • 傳統安裝憑證有多麻煩?
  • ACM 怎麼幫你省下大把時間?
  • 以及 DNS、網域解析、根網域設定等常見問題的解法

不管你是剛開始用 AWS 架站,還是想讓網站更安全,這篇都能幫你一次搞懂 SSL 憑證與 ACM 的實戰重點!

憑證是什麼?為什麼網站需要它?

在開始介紹 ACM 之前,我們先從「憑證」本身講起。

你可能注意過,有些網站的網址開頭是 http://,而有些則是 https://,並且網址旁邊會顯示一個「🔒鎖頭」圖示。

這個小鎖頭,背後其實是一種叫做 SSL/TLS 憑證 的技術,負責讓你和網站之間的資料傳輸變得安全、加密且不可竄改。

沒有憑證會怎樣?

如果一個網站沒有憑證:

  • 瀏覽器會跳出「⚠️ 此網站不安全」的警告
  • 網址會顯示 http:// 而不是 https://
  • 你在網站上輸入的帳號、密碼、信用卡等資料,可能在傳輸途中被攔截、竊聽

這就像你在一間咖啡廳的 Wi-Fi 上登入網銀,但資料完全沒加密,被駭客「聽光光」。

有憑證會怎樣?

有憑證的網站:

  • 網址會自動轉為 https://
  • 顯示綠色鎖頭,讓訪客安心
  • 所有資料會在傳輸過程中被加密,就算被攔截也看不懂

簡單來說:

憑證的作用就是:幫你的網站戴上安全帽,保護用戶的隱私與資料安全。

誰簽發憑證?什麼是 CA(憑證頒發機構)?

網站不能自己說:「我有憑證,我很安全喔!」這就像某人自稱自己是醫生,但沒任何醫學院證書或公信力組織認可 —— 誰會信?

在數位世界中,你需要找一個大家都信得過的「中立第三方」來幫你背書,這個角色就叫做 CA(Certificate Authority,憑證頒發機構)。

CA 在做什麼?為什麼這麼重要?

CA 的工作就是幫網站核發 SSL/TLS 憑證,內容會包含:

  • 這個網站的網域名稱(如 example.com)
  • 憑證的有效期間(起訖日期)
  • 發憑證的機構資訊
  • 公開金鑰(用於加密通訊)

CA 會透過驗證機制,確保你真的擁有這個網域的管理權限,例如:

  • 要你在 DNS 上加一筆 TXT 或 CNAME 記錄
  • 要你在網站根目錄上傳一個驗證檔案
  • 更嚴格的(EV 憑證)還要對企業資料進行人工審核

一旦驗證成功,CA 就會簽署憑證(Certificate),並發給你。這份憑證會被瀏覽器識別並信任,讓網站能正常顯示 HTTPS 🔒 鎖頭。

為什麼瀏覽器會信任 CA 發的憑證?

瀏覽器和作業系統內部都內建一份「信任 CA 名單」,這份名單就像一張白名單:

  • 你不是在白名單上的機構 → 發的憑證預設就不被信任
  • 你在白名單上 → 發的憑證會自動被所有用戶接受

所以,就算你技術上可以自己簽憑證(稱為 self-signed certificate),大多數瀏覽器一樣會跳出「⚠️ 不受信任的憑證」警告。因為它不知道該不該相信你。

這也是為什麼只有大型且可信的機構能當 CA,因為他們的根憑證(Root Certificate)已經內建在幾十億台裝置中。

常見的 CA 機構有哪些?

CA 名稱費用特點
Let’s Encrypt免費開源非營利、支援自動化、最受歡迎的免費憑證
DigiCert付費企業等級、支援 EV(擴充驗證)憑證
GlobalSign付費穩定可靠、支援企業與個人使用
Sectigo(原 Comodo)付費市佔高、彈性方案多
Amazon Trust Services免費AWS 專用,由 ACM 背後簽發
費用免費
特點開源非營利、支援自動化、最受歡迎的免費憑證
費用付費
特點企業等級、支援 EV(擴充驗證)憑證
費用付費
特點穩定可靠、支援企業與個人使用
費用付費
特點市佔高、彈性方案多
費用免費
特點AWS 專用,由 ACM 背後簽發

其中,Let’s Encrypt 和 Amazon Trust Services 都提供免費憑證,是開發者最常見的選擇。

🧠 小提醒:你無法自由選 CA(在某些平台)

如果你是使用托管平台(如 GitHub Pages、Firebase、Cloudflare、AWS ACM),它們通常已內建特定 CA,由平台自動幫你申請與管理憑證,你不用也不能選擇 CA。

但如果你是自己架站(用 Apache、Nginx、cPanel 等),就可以自由選擇要用哪個 CA 發憑證。

SSL 憑證是怎麼運作的?

SSL 憑證的真正用途,不只是讓網站顯示一個「🔒鎖頭」而已。

它背後運作的是一套叫做 公開金鑰加密(Public Key Encryption) 的安全機制,能讓你和伺服器之間的資料加密傳輸、避免被第三方竊聽或竄改。

讓我們用一個簡化但完整的流程來說明:

TLS/SSL 加密連線的流程步驟

假設你打開一個使用 SSL 的網站,例如 https://example.com,以下是瀏覽器背後發生的事:

✅ 第 1 步:瀏覽器發出請求(Hello!)

當你在瀏覽器輸入網址並按下 Enter,瀏覽器會先發出一個 Client Hello 請求,告訴伺服器它:

  • 支援哪些加密演算法
  • 使用的是哪個 TLS 版本
  • 傳送一組隨機數(client random)

✅ 第 2 步:伺服器回應憑證(Hello + Certificate)

伺服器收到請求後,會回傳一個 Server Hello 響應,並附上:

  • 一張 SSL 憑證(含公開金鑰)
  • 它選擇的加密演算法
  • 它的隨機數(server random)

這個憑證是之前由 CA 簽發的,用來讓瀏覽器確認:

  • 🧾 這個網域是合法的(有通過驗證)
  • 🔐 這把公開金鑰是網站的,且尚未過期或撤銷

✅ 第 3 步:瀏覽器驗證憑證的真偽

瀏覽器會使用它內建的「CA 名單」(白名單),來檢查這張憑證是否可信:

  • 是否由受信任的 CA 簽發?
  • 是否過期?
  • 是否為指定網域使用?
  • 是否有遭撤銷(透過 CRL 或 OCSP)?

如果這張憑證沒問題,就繼續下一步;
如果驗證失敗,瀏覽器會跳出警告:「⚠️ 憑證不安全,請勿繼續」

✅ 第 4 步:產生對稱金鑰(加密通訊的基礎)

此時,瀏覽器會使用伺服器提供的「公開金鑰」,加密一組「對稱金鑰」(也稱為 pre-master secret)並送回伺服器。

因為只有伺服器持有對應的「私密金鑰」,所以只有它能解開這段資料。

✅ 公開金鑰加密 → ✅ 私密金鑰解密
→ 這就是「公開金鑰加密」的核心概念

雙方接著用 client random + server random + pre-master secret 共同計算出後續溝通要用的對稱加密金鑰。

✅ 第 5 步:建立加密通道(TLS Handshake 完成)

握手成功後,瀏覽器與伺服器會開始使用 對稱加密 的方式傳輸資料。

這是因為對稱加密(雙方共用同一組金鑰)效率更高,速度快,適合傳輸大量資料。

此時,雙方的通訊已經是完全加密的,就算中間被攔截,也無法解密內容。

總結:SSL 憑證背後的功能有這些

功能說明
身份認證證明這個網站是真的,不是仿冒釣魚站
金鑰交換傳送對稱加密金鑰的過程是安全的
建立信任透過 CA 的背書讓瀏覽器放心與網站通訊
加密資料所有資料都經過加密,避免被偷聽或修改
說明證明這個網站是真的,不是仿冒釣魚站
說明傳送對稱加密金鑰的過程是安全的
說明透過 CA 的背書讓瀏覽器放心與網站通訊
說明所有資料都經過加密,避免被偷聽或修改

👶 如果用日常比喻來說:

你可以把這整個流程想像成:

你(用戶)要寄出一封秘密信(資料)給網站,但不想被其他人偷看 →
網站先寄來一個「保險箱 + 鑰匙孔」(公開金鑰) →
你把信鎖進去(加密)後寄出去 →
網站用它唯一的鑰匙(私密金鑰)打開 →
雙方開始用一組共通暗號(對稱金鑰)來交談 →
沒有鑰匙的第三方全程都聽不懂

公有憑證 vs 私有憑證:有什麼差別?

在 SSL/TLS 憑證的世界中,依照簽發來源的信任層級不同,可以將憑證大致分為兩種:

  1. ✅ 公有憑證(Public Certificate)
  2. 🔒 私有憑證(Private Certificate)

它們的最大差異,就在於:誰簽的、誰會信任它。

公有憑證(Public Certificate):對外公開、被瀏覽器預設信任

公有憑證是最常見、也是你每天使用的網站(如 Google、Facebook、Shopee)所使用的那種憑證。

🌍 特點如下:

  • 由「公開信任的 CA(憑證機構)」簽發,如:
  • Let’s Encrypt(免費)
  • DigiCert、GlobalSign(商業)
  • Amazon Trust Services(ACM 背後使用的 CA)
  • 被幾乎所有作業系統與瀏覽器預先信任(例如 Chrome、Safari、Edge 會內建一份「可信任憑證頒發機構清單」)
  • 使用者訪問網站時,不需要做任何設定,就會看到綠鎖頭 🔒 與 https://

🧭 常見用途:

使用情境說明
電商網站 / 企業官網 / 部落格用來保護用戶資料安全與提升信任感
API 伺服器 / 後台系統提供 HTTPS 保護,避免攔截或竄改
第三方支付、會員登入、表單提交等安全性要求高的頁面加密傳輸、通過信任認證、防範釣魚
說明用來保護用戶資料安全與提升信任感
說明提供 HTTPS 保護,避免攔截或竄改
說明加密傳輸、通過信任認證、防範釣魚

私有憑證(Private Certificate):內部使用、自訂信任範圍

私有憑證是由自己簽發(或企業內部的 CA 簽發),不被外部瀏覽器與裝置預設信任。

🔐 特點如下:

  • 通常使用 自建 CA 或企業內部使用 AWS Private CA 等工具來簽發
  • 不會被瀏覽器或作業系統信任,使用者必須手動匯入 CA 根憑證才會顯示安全
  • 適合在內網、內部系統中使用,不需對外部公開

🛠️ 使用時會有這些現象:

  • 瀏覽器會跳出「⚠️ 不受信任的憑證」紅色警告
  • 需手動將私有 CA 加進裝置的信任憑證列表中(例如公司內部設備或 MDM 管理下的手機)
  • 適合用於「你控制所有設備」的場景

🧭 常見用途:

使用情境說明
公司內部系統 / Intranet管理後台、內部資源系統的 HTTPS 傳輸
測試環境 / 開發環境測試部署 HTTPS 機制,不必向外部 CA 申請
IoT 裝置或內部 API 認證用管理大規模裝置身份與通訊安全
公司內部郵件、檔案服務、內部 VPN避免外洩又可加密傳輸,但只在內網使用
說明管理後台、內部資源系統的 HTTPS 傳輸
說明測試部署 HTTPS 機制,不必向外部 CA 申請
說明管理大規模裝置身份與通訊安全
說明避免外洩又可加密傳輸,但只在內網使用

🧰 ACM 裡的私有憑證功能(進階)

AWS 提供一個進階服務叫做 AWS Private CA,讓企業可以在雲端建立自己的憑證機構(CA),用來簽發私有憑證,並透過 ACM 管理。

  • 適合大型企業需要控管大量內部系統或 IoT 裝置的身份時使用
  • 支援與 AWS 其他服務整合(如 IoT Core、EC2)
  • 可設定憑證存活時間、吊銷機制、發行規則等

不過這屬於進階企業應用,一般中小型開發者或公開網站幾乎不會用到。

公有 vs 私有憑證對比表:

項目公有憑證私有憑證
誰簽的公開信任的 CA(例如 Let’s Encrypt)自建 CA / AWS Private CA
是否預設信任✅ 被瀏覽器信任❌ 需要手動匯入或 MDM 管理設備信任
用途對外網站、API、商業應用內部系統、測試環境、私有 IoT 通訊
用戶操作無需任何設定,瀏覽器自動信任須匯入 CA 根憑證或預先配置
費用多數免費,也有商業版憑證建 CA 有費用,但單次憑證可大量發行
公有憑證公開信任的 CA(例如 Let’s Encrypt)
私有憑證自建 CA / AWS Private CA
公有憑證✅ 被瀏覽器信任
私有憑證❌ 需要手動匯入或 MDM 管理設備信任
公有憑證對外網站、API、商業應用
私有憑證內部系統、測試環境、私有 IoT 通訊
公有憑證無需任何設定,瀏覽器自動信任
私有憑證須匯入 CA 根憑證或預先配置
公有憑證多數免費,也有商業版憑證
私有憑證建 CA 有費用,但單次憑證可大量發行

傳統憑證安裝流程

安裝 SSL 憑證流程

如果你是自己架設網站(例如用 VPS、Nginx、Apache),想讓網站變成 HTTPS 🔒,大致上要做這幾件事:

✅ 步驟 1:先自己做一張申請表(CSR)

你需要在伺服器上用指令產生一組「金鑰」和一張「申請表」(CSR)。

這張申請表裡面會寫:你是誰、網站網域是什麼,準備拿去請別人簽名。

openssl req -new -newkey rsa:2048 -nodes -keyout example.key -out example.csr

✅ 步驟 2:把申請表送去憑證機構(CA)

把 CSR 傳給像 Let’s Encrypt 或 DigiCert 這類憑證機構。

他們會幫你「簽名」,回傳一張正式的憑證(.crt 檔)。

✅ 步驟 3:證明你真的擁有這個網域

憑證機構不會輕易相信你,會要求你驗證身分,例如:

  • 在網站根目錄放一個特殊檔案(HTTP 驗證)
  • 或是到 DNS 加上一筆 TXT / CNAME 記錄(DNS 驗證)

這樣他們才能確定:你真的可以管理這個網域。

✅ 步驟 4:手動裝上憑證

拿到憑證 .crt 檔後,你要自己開 Web Server 設定檔,把憑證路徑與金鑰路徑填進去:

ssl_certificate     /etc/ssl/example.crt;
ssl_certificate_key /etc/ssl/example.key;

然後重啟伺服器,HTTPS 才會生效。

✅ 步驟 5:定期續約,別忘了!

大部分免費憑證(像 Let’s Encrypt)只有效 90 天。

你要寫自動排程(如 cronjob)去幫它定期續期,否則網站會變「不安全」。

傳統方式的痛點:

問題說明
安裝流程繁瑣CSR、驗證、設定 Web Server 都要自己處理
容易忘記續期憑證過期會導致網站無法訪問
多台伺服器同步麻煩每台都要裝憑證、設定 SSL
非技術人員難操作常常需要用 CLI 指令、修改設定檔
說明CSR、驗證、設定 Web Server 都要自己處理
說明憑證過期會導致網站無法訪問
說明每台都要裝憑證、設定 SSL
說明常常需要用 CLI 指令、修改設定檔

ACM(AWS Certificate Manager)介紹

ACM(AWS Certificate Manager) 就是 AWS 為了解決上述痛點而推出的免費工具,它幫你把所有繁瑣的事都做完,流程變得非常簡單。

使用 ACM 的申請與安裝流程

只要你是在 AWS 架站(例如使用 Load Balancer、CloudFront、API Gateway),安裝憑證只需要這幾步:

  1. 到 ACM 控制台,點選「Request a public certificate」
  2. 輸入你要申請的網域(例如 www.example.com)
  3. 選擇 DNS 驗證方式 → 系統提供 CNAME 記錄
  4. 把 CNAME 設進 DNS 管理平台(GoDaddy、Cloudflare 都可以)
  5. 幾分鐘後憑證核發 → 自動幫你套用到指定的 AWS 服務

憑證續期?你不用動手

ACM 會定期自動檢查憑證狀態並自動續期,只要:

  • 當初的 DNS 驗證記錄沒刪除
  • 憑證綁定的服務(如 ELB)還在使用中

你就永遠不用擔心憑證過期、網站掛掉的風險。

ACM 支援的服務有哪些?

AWS 服務名稱用途說明
ELB(負載平衡器)給網站分流,憑證安裝在 ELB 即可
CloudFrontCDN 加速服務,讓靜態內容支援 HTTPS
API GatewayREST / HTTP API 提供 HTTPS 保護
App Runner / Beanstalk一鍵部署應用程式,憑證自動套用
AWS IoT / ACM for IoT給設備用的憑證(進階)
用途說明給網站分流,憑證安裝在 ELB 即可
用途說明CDN 加速服務,讓靜態內容支援 HTTPS
用途說明REST / HTTP API 提供 HTTPS 保護
用途說明一鍵部署應用程式,憑證自動套用
用途說明給設備用的憑證(進階)

⚠️ 注意:ACM 的憑證只能用在 AWS 生態系內,不能匯出到第三方主機使用。

ACM 只能用在 AWS 嗎?適用情境總整理

是的。ACM(AWS Certificate Manager)是 AWS 提供的專屬服務,只能在 AWS 的雲端平台內使用。

也就是說,你不能下載 ACM 的憑證檔,拿去裝在其他平台(例如 cPanel、Nginx)上使用。

ACM 會自動幫你安裝憑證到 AWS 提供的服務中,如 Load Balancer、CloudFront、API Gateway 等。

🔧 換句話說:

  • 只要你的網站部署在 AWS 上,ACM 就非常好用
  • 但如果你沒用 AWS,ACM 就完全派不上用場

常見架設方式與 ACM 適用性比較:

架設方式是否適用 ACM?說明
EC2 + ELB + CloudFront✅ 適用完整的 AWS 架構,ACM 可自動掛載在 ELB 和 CDN 上
API Gateway 提供 REST API✅ 適用ACM 可直接掛在 API Gateway 上,提供 HTTPS 介面
Firebase Hosting / Heroku / Vercel❌ 不適用這些平台本身已內建免費憑證,與 ACM 無關
自己租 VPS + Nginx / Apache❌ 不適用沒有用 AWS,ACM 憑證無法下載,需自行使用 Let’s Encrypt 或其他憑證
傳統虛擬主機(cPanel、Plesk)❌ 不適用多數這類主機使用 Let’s Encrypt 或付費 CA 來提供 SSL
是否適用 ACM?✅ 適用
說明完整的 AWS 架構,ACM 可自動掛載在 ELB 和 CDN 上
是否適用 ACM?✅ 適用
說明ACM 可直接掛在 API Gateway 上,提供 HTTPS 介面
是否適用 ACM?❌ 不適用
說明這些平台本身已內建免費憑證,與 ACM 無關
是否適用 ACM?❌ 不適用
說明沒有用 AWS,ACM 憑證無法下載,需自行使用 Let’s Encrypt 或其他憑證
是否適用 ACM?❌ 不適用
說明多數這類主機使用 Let’s Encrypt 或付費 CA 來提供 SSL

常見誤解釐清:

  • ACM 是免費的,但不是「萬用型」的憑證解決方案。

它是 AWS 專屬工具,設計目的就是為了讓 AWS 內的 HTTPS 配置變簡單。

  • 若你用其他平台,即便 ACM 免費,你也無法把它拿出來用。

因為它不能讓你下載 .crt 或 .pem 檔案,只能由 AWS 自動掛載到自家服務。

ACM 和 Let’s Encrypt 差在哪?

Let’s Encrypt 是一個開源、非營利的憑證機構(CA),可以讓所有人(不分平台)免費申請 SSL 憑證。

幾乎所有架站工具、VPS 主機、控制面板都支援它。

以下是 ACM 與 Let’s Encrypt 的對比:

項目ACM(AWS Certificate Manager)Let’s Encrypt
適用平台只能用在 AWS 生態系,無法匯出憑證檔案可用在任何平台,支援憑證匯出與通用部署
是否免費✅ 免費✅ 免費
憑證類型公有憑證(由 Amazon CA 簽發)公有憑證(由 Let’s Encrypt 簽發)
申請方式AWS 控制台 / CLI,掛載在 AWS 服務中使用 certbot、acme.sh、API 等工具
驗證方式DNS 驗證(透過 CNAME)DNS、HTTP 驗證都支援
安裝方式自動掛在 ELB、CloudFront、API Gateway 等需手動安裝到 Nginx、Apache、cPanel 等伺服器
續期機制自動續期(只要 DNS 驗證記錄沒刪掉)需搭配工具與排程(如 crontab)做自動續期
ACM(AWS Certificate Manager)只能用在 AWS 生態系,無法匯出憑證檔案
Let’s Encrypt可用在任何平台,支援憑證匯出與通用部署
ACM(AWS Certificate Manager)✅ 免費
Let’s Encrypt✅ 免費
ACM(AWS Certificate Manager)公有憑證(由 Amazon CA 簽發)
Let’s Encrypt公有憑證(由 Let’s Encrypt 簽發)
ACM(AWS Certificate Manager)AWS 控制台 / CLI,掛載在 AWS 服務中
Let’s Encrypt使用 certbot、acme.sh、API 等工具
ACM(AWS Certificate Manager)DNS 驗證(透過 CNAME)
Let’s EncryptDNS、HTTP 驗證都支援
ACM(AWS Certificate Manager)自動掛在 ELB、CloudFront、API Gateway 等
Let’s Encrypt需手動安裝到 Nginx、Apache、cPanel 等伺服器
ACM(AWS Certificate Manager)自動續期(只要 DNS 驗證記錄沒刪掉)
Let’s Encrypt需搭配工具與排程(如 crontab)做自動續期

選擇建議

使用情境推薦憑證方案原因說明
網站架在 AWS(EC2 + ELB + CloudFront)✅ ACM全自動、一鍵申請,省心省力
提供 API Gateway 串接服務✅ ACMAWS 原生支援,自動部署
自己用 Nginx 架站或用 cPanel 主機✅ Let’s Encrypt可下載憑證、通用性強
想把憑證裝在其他雲平台(如 Linode、DigitalOcean)✅ Let’s EncryptACM 無法離開 AWS 使用
想跨平台重複使用憑證(例如開發環境和正式環境都一樣)✅ Let’s Encrypt / 商用憑證可備份與共用
只想在 AWS 裡 HTTPS 開站,不想自己處理憑證細節✅ ACM完全自動化、最無腦方案
推薦憑證方案✅ ACM
原因說明全自動、一鍵申請,省心省力
推薦憑證方案✅ ACM
原因說明AWS 原生支援,自動部署
推薦憑證方案✅ Let’s Encrypt
原因說明可下載憑證、通用性強
推薦憑證方案✅ Let’s Encrypt
原因說明ACM 無法離開 AWS 使用
推薦憑證方案✅ Let’s Encrypt / 商用憑證
原因說明可備份與共用
推薦憑證方案✅ ACM
原因說明完全自動化、最無腦方案

📌 小提醒:

  • ✅ ACM 的最大優勢:一鍵上線、自動續期、零設定負擔
  • ⚠️ ACM 的最大限制:只能用在 AWS,自架站或搬家就不能用

所以在選擇憑證方案時,要看你的網站在哪裡運行、未來會不會搬遷、是否需要跨平台部署,才能選出最合適的工具。

ACM 憑證申請與驗證流程

當你在 AWS 架站,希望網站能使用 HTTPS 🔒 加密時,第一步通常就是使用 AWS Certificate Manager(ACM) 申請免費的憑證。

但申請之後,還需要你做兩件事:

  1. 驗證你擁有這個網域(CNAME 驗證)
  2. 把你申請的網域導向 AWS 上的網站(DNS 對應)

這兩步都要透過 在 DNS 控制台手動新增 CNAME 記錄 來完成。

設置 ACM 驗證用的 CNAME(核發與續期 HTTPS 憑證)

在 AWS 上使用 HTTPS 時,第一步就是申請 SSL 憑證,而 AWS 提供的 ACM(AWS Certificate Manager)讓你可以免費申請憑證。

不過為了確認「你確實擁有該網域」,AWS 不會直接核發,而是要求你在 DNS 控制台新增一筆 CNAME 記錄進行驗證。這就是這一段設定的目的。

🎯 為什麼要設這筆 CNAME?

  • AWS 透過這筆 CNAME 驗證你對該網域有修改 DNS 記錄的權限
  • 這筆 CNAME 必須一直保留,未來 ACM 會定期檢查,以便自動續期憑證
  • 若設定錯誤或刪除,會導致:
  • 憑證無法核發(Pending validation 卡住)
  • 幾個月後憑證自動續期失敗,導致網站跳出「⚠️ 不安全連線」

步驟 1:申請憑證

  1. 登入 AWS Certificate Manager 控制台
  2. 點選「Request a certificate」
  3. 選擇「Public certificate」(公開用)
  4. 在「Add domain names」中輸入你要支援的網域:
  • 建議輸入兩個:
    • example.com(根網域)
    • www.example.com(子網域)
  1. 選擇「DNS validation」
  2. 確認後送出,進入憑證清單畫面

步驟 2:取得 CNAME 驗證資訊

  1. 點開剛剛送出的憑證
  2. 會看到狀態為「Pending validation」
  3. 畫面中會顯示一組或多組 CNAME 驗證資訊(針對你剛輸入的每個網域各有一筆): 例如:
   Name:_1234567890abcdef.example.com.
   Value:_a1b2c3d4e5f6g7h8.acm-validations.aws.

步驟 3:前往 DNS 控制台新增 CNAME

開啟你註冊網域的平台(如 GoDaddy、Cloudflare、Route 53),到它的 DNS 控制台新增一筆 CNAME 記錄:

欄位內容範例
Name_1234567890abcdef.example.com.(直接貼上)
TypeCNAME(選擇)
Value_a1b2c3d4e5f6g7h8.acm-validations.aws.(貼上)
內容範例_1234567890abcdef.example.com.(直接貼上)
內容範例CNAME(選擇)
內容範例_a1b2c3d4e5f6g7h8.acm-validations.aws.(貼上)

✅ 建議不要修改 CNAME 的尾端「.」,有些平台會自動加,有些不會,但保持完整格式比較安全。

步驟 4:驗證是否通過

  1. 回到 ACM 頁面
  2. 等待 5~30 分鐘,狀態應該會從「Pending validation」變成「Issued」
  3. 若過一小時仍無變化,請檢查:
  • DNS 是否有貼錯(特別是 Name 欄位不要截斷)
  • TTL 設定是否太長(建議 300 秒)
  • 有無覆蓋錯誤(有些平台會自動加網域字尾,導致 Name 重複)

⚠️ 常見錯誤提醒

問題原因說明
憑證狀態卡在 PendingCNAME 貼錯欄位或格式錯誤
驗證完成後刪除 CNAME,後續憑證續期失敗ACM 找不到該記錄,無法續期憑證
CNAME 填入時不確定要不要加網域字尾檢查平台是否會自動補上,或使用完整格式(Name 包含網域)最保險
原因說明CNAME 貼錯欄位或格式錯誤
原因說明ACM 找不到該記錄,無法續期憑證
原因說明檢查平台是否會自動補上,或使用完整格式(Name 包含網域)最保險

設置網站對外導向用的 CNAME(讓網址連到 AWS 主機)

完成 ACM 憑證申請後,你的網站雖然可以提供加密連線(HTTPS),但這還不夠。

你還需要設定一筆 CNAME 記錄,讓使用者輸入網址(如 www.example.com)時,能正確連到你的 AWS 主機(Elastic Load Balancer, ELB)。

🔍 為什麼需要這筆 CNAME?

  • ELB(Elastic Load Balancer)是 AWS 給你的一個「對外入口主機」,它會分流流量到背後的 EC2 或容器服務(如 ECS/Fargate)。
  • AWS 不會主動幫你綁定網域名稱(如 www.example.com),你必須自己在 DNS 設定中把網域指向 ELB 的 DNS 名稱。
  • 這筆設定的本質:是讓你自有的「域名」→ 導向 → AWS 提供的 ELB 主機。

步驟 1:進入 EC2 控制台,找到 Load Balancer

  1. 登入 AWS EC2 控制台
  2. 左側選單 → 點選「Load Balancers」
  3. 找到你建立的 Load Balancer(通常是 application 類型)
  4. 點進該 Load Balancer 詳細頁面
  5. 在下方資訊區找到一個欄位叫做「DNS name」,例如:
   my-site-123456.ap-northeast-1.elb.amazonaws.com
  1. 複製這組 DNS 名稱,稍後會貼入你的 DNS 控制台

步驟 2:到你的 DNS 平台,設定 CNAME

打開你購買網域的平台(例如 GoDaddy、Cloudflare、Route 53),前往該網域的 DNS 設定區:

新增一筆 CNAME 記錄,內容如下:

欄位說明
Namewww(這表示訪客輸入 www.example.com 時的行為)
TypeCNAME(類型選擇 CNAME)
Value貼上剛剛複製的 ELB DNS 名稱,例如:
my-site-123456.ap-northeast-1.elb.amazonaws.com.
說明www(這表示訪客輸入 www.example.com 時的行為)
說明CNAME(類型選擇 CNAME)
說明貼上剛剛複製的 ELB DNS 名稱,例如:my-site-123456.ap-northeast-1.elb.amazonaws.com.

✅ 有些平台會要求 Value 加上一個句點(.)結尾,有些則會自動補上,兩種都可以,記得依照平台指引填寫。

步驟 3:儲存後進行測試

  1. 等待幾分鐘讓 DNS 生效(根據 TTL 設定,通常 1~5 分鐘)
  2. 在瀏覽器中輸入:https://www.example.com
  3. 若一切設置正確,應該會看到你部署在 AWS 上的網站成功開啟(且顯示 🔒 HTTPS)

💡 小補充:如果你想指向其他子網域?

假如你有其他子網域(例如 app.example.com, blog.example.com),也可以依樣畫葫蘆設定更多 CNAME:

NameValue(ELB 主機)
appmy-site-123456.ap-northeast-1.elb.amazonaws.com
blogmy-site-123456.ap-northeast-1.elb.amazonaws.com
Value(ELB 主機)my-site-123456.ap-northeast-1.elb.amazonaws.com
Value(ELB 主機)my-site-123456.ap-northeast-1.elb.amazonaws.com

這樣不同子網域也能共用同一個 ELB(或你可以建立不同的 ELB 分流)。

⚠️ 常見錯誤提醒

問題原因說明
網站打不開 / 錯誤網頁CNAME 設錯(貼到 IP 或錯誤的 ELB 名稱)
顯示 ELB 預設 503 畫面ELB 背後沒掛上正確的 Target Group,或應用尚未啟動
HTTPS 鎖頭不顯示(還是 http)ACM 憑證還沒核發,或 ELB Listener 未設定 HTTPS(要用 port 443 並綁定憑證)
原因說明CNAME 設錯(貼到 IP 或錯誤的 ELB 名稱)
原因說明ELB 背後沒掛上正確的 Target Group,或應用尚未啟動
原因說明ACM 憑證還沒核發,或 ELB Listener 未設定 HTTPS(要用 port 443 並綁定憑證)

如果要連根網域(example.com)怎麼辦?

當我們在設定 DNS 記錄時,很多人會有一個常見的需求:

「我希望輸入 example.com(不是 www.example.com)就能開啟我的網站,而且要有 HTTPS 鎖頭 🔒。」

這聽起來很合理,但背後其實藏著一個技術限制:

🚫 為什麼根網域不能使用 CNAME?

在 DNS 的標準規範中:

  • CNAME 記錄的作用是「讓一個網域別名指向另一個網域名稱」。
  • 但根網域(如 example.com)通常已經綁定了其他關鍵記錄(像是 NS、SOA 記錄),無法再設定為 CNAME。

換句話說:你只能為 www.example.com 設 CNAME,但不能為 example.com 設 CNAME。

那該怎麼辦?

🛠️ 替代方案:使用 A 記錄 或平台提供的「類似功能」

不同的 DNS 平台,針對這個問題提供了不一樣的解法。你可以參考以下整理:

DNS 平台替代方式建議程度補充說明
GoDaddy改設 A 記錄,手動填入 IP❌ 不建議ELB 的 IP 是浮動的,不保證長期穩定,維護風險高
Cloudflare使用 CNAME Flattening 功能✅ 推薦表面看起來是 A 記錄,實際底層會轉發至 CNAME 的主機
Route 53(AWS)使用 Alias Record✅ 推薦AWS 原生支援 ELB、S3、CloudFront 作為根網域指向對象
Namecheap、Google Domains 等有些平台支援類似功能,名稱不同(如 ANAME)⭕ 看平台而定功能不一,需查閱該平台支援文檔
替代方式改設 A 記錄,手動填入 IP
建議程度❌ 不建議
補充說明ELB 的 IP 是浮動的,不保證長期穩定,維護風險高
替代方式使用 CNAME Flattening 功能
建議程度✅ 推薦
補充說明表面看起來是 A 記錄,實際底層會轉發至 CNAME 的主機
替代方式使用 Alias Record
建議程度✅ 推薦
補充說明AWS 原生支援 ELB、S3、CloudFront 作為根網域指向對象
替代方式有些平台支援類似功能,名稱不同(如 ANAME)
建議程度⭕ 看平台而定
補充說明功能不一,需查閱該平台支援文檔

🔍 什麼是「CNAME Flattening」與「Alias Record」?

技術名稱運作原理支援平台
CNAME FlatteningCloudflare 會將 CNAME 解譯為真實 IP,再以 A 記錄形式回應Cloudflare
Alias RecordAWS Route 53 提供的特殊記錄類型,允許根網域指向 ELB/S3Route 53(AWS)
ANAME / ALIAS / @CNAME其他 DNS 廠商提供的變形版實作Namecheap、DNSimple 等
運作原理Cloudflare 會將 CNAME 解譯為真實 IP,再以 A 記錄形式回應
支援平台Cloudflare
運作原理AWS Route 53 提供的特殊記錄類型,允許根網域指向 ELB/S3
支援平台Route 53(AWS)
運作原理其他 DNS 廠商提供的變形版實作
支援平台Namecheap、DNSimple 等

✅ 最佳做法建議

需求情境建議做法
使用 AWS 架站,想讓根網域正常解析且有 HTTPS✅ 使用 Route 53 → 設定 Alias Record 指向 ELB
已使用 Cloudflare 管理 DNS✅ 使用 CNAME Flattening → 指向 ELB 主機名稱
無法更換 DNS 平台(如只能用 GoDaddy)⚠️ 勉強使用 A 記錄 → 手動查 ELB IP(不穩定)或轉向 www
建議做法✅ 使用 Route 53 → 設定 Alias Record 指向 ELB
建議做法✅ 使用 CNAME Flattening → 指向 ELB 主機名稱
建議做法⚠️ 勉強使用 A 記錄 → 手動查 ELB IP(不穩定)或轉向 www

🧠 延伸補充:為什麼這很重要?

現代網站使用者輸入網址時,很可能只輸入 example.com 而非 www.example.com。如果你沒有處理好根網域的解析:

  • 訪客可能會看到「無法連上網站」
  • 或跳出錯誤的 HTTP 頁面(例如 403、錯誤 ELB 預設頁)

這會直接影響你的 SEO、品牌形象與網站使用體驗。

總結

看完這篇,你應該已經知道為什麼網站一定要有 SSL 憑證,以及傳統安裝流程有多麻煩。

AWS Certificate Manager(ACM)就是為了解決這些痛點而生,讓你在 AWS 上架站時,SSL 憑證的申請、驗證、安裝、續期全都自動化,幾乎不用自己動手。

不管是 DNS 設定、CNAME 驗證還是根網域解析,文中都幫你整理了常見問題和解法。

只要你的網站架在 AWS,ACM 幾乎就是最省事的選擇;如果用其他平台,Let’s Encrypt 也是不錯的免費方案。

希望這篇教學能幫你把 SSL 憑證這件事一次搞懂,讓你的網站安全又專業!

上一篇DNS 中 CNAME 記錄怎麼用?你的子網域可以這樣設定
下一篇DNS 中的 MX 記錄是什麼?一篇搞懂收信背後的關鍵設定
目前還沒有留言,成為第一個留言的人吧!

發表留言

留言將在審核後顯示。

架構

目錄

  • 憑證是什麼?為什麼網站需要它?
  • 沒有憑證會怎樣?
  • 有憑證會怎樣?
  • 誰簽發憑證?什麼是 CA(憑證頒發機構)?
  • CA 在做什麼?為什麼這麼重要?
  • 為什麼瀏覽器會信任 CA 發的憑證?
  • 常見的 CA 機構有哪些?
  • SSL 憑證是怎麼運作的?
  • TLS/SSL 加密連線的流程步驟
  • 總結:SSL 憑證背後的功能有這些
  • 公有憑證 vs 私有憑證:有什麼差別?
  • 公有憑證(Public Certificate):對外公開、被瀏覽器預設信任
  • 私有憑證(Private Certificate):內部使用、自訂信任範圍
  • 公有 vs 私有憑證對比表:
  • 傳統憑證安裝流程
  • 安裝 SSL 憑證流程
  • 傳統方式的痛點:
  • ACM(AWS Certificate Manager)介紹
  • 使用 ACM 的申請與安裝流程
  • 憑證續期?你不用動手
  • ACM 支援的服務有哪些?
  • ACM 只能用在 AWS 嗎?適用情境總整理
  • 常見架設方式與 ACM 適用性比較:
  • 常見誤解釐清:
  • ACM 和 Let’s Encrypt 差在哪?
  • 選擇建議
  • ACM 憑證申請與驗證流程
  • 設置 ACM 驗證用的 CNAME(核發與續期 HTTPS 憑證)
  • 設置網站對外導向用的 CNAME(讓網址連到 AWS 主機)
  • 如果要連根網域(example.com)怎麼辦?
  • 總結