# 憑證是什麼?中華電信發生什麼事? > 最近因為Google撤銷中華電信憑證的信任,導致很多網站出現不安全警示,來仔細了解一下憑證是什麼吧! > {%preview https://www.cna.com.tw/news/afe/202506170307.aspx %} > {%preview https://tw.news.yahoo.com/google%E6%92%A4%E9%8A%B7%E4%B8%AD%E8%8F%AF%E9%9B%BB%E4%BF%A1%E6%86%91%E8%AD%89%E4%BF%A1%E4%BB%BB-%E8%91%A3%E4%BA%8B%E9%95%B7%E5%85%AC%E9%96%8B%E9%81%93%E6%AD%89%E6%8F%90-8%E5%A4%A7%E6%94%B9%E5%96%84-083246042.html %} > {%preview https://www.ithome.com.tw/news/169441 %} # HTTPS連線流程概述 > 在了解憑證是什麼之前,先來看一下HTTPS連線流程 1. DNS 解析 - 使用者輸入網址(如 example.com) - 透過 DNS 查出對應 IP(例:142.250.xx.xx) 2. TCP 三次握手 - Client 傳送 SYN → Server - Server 回 SYN-ACK → Client - Client 傳 ACK → Server 3. TLS 握手與憑證驗證 ✨ **這是 HTTPS 安全性的關鍵所在,詳述於下方。** 4. HTTP 請求與回應 - Client 發送加密的 GET/POST 請求 - Server 回應加密的資料(HTML/JSON 等) 5. 連線終止 - TLS 層結束加密通道 → TCP 四次揮手關閉連線 # 數位憑證與 TLS 驗證流程 > 先來說明三個重要的角色: > - 🧑‍💻 Client > - 使用者的瀏覽器或 App,主動發起連線,驗證憑證 > - e.g. Chrome、Safari、Postman、cURL > - 🖥️ Server > - 你所架設的網站或 API 伺服器,提供 HTTPS 連線與服務 > - e.g. Nginx、Apache、Vercel、CloudFront > - 🏛️ CA(Certificate Authority) > - 負責簽發、驗證網站憑證的第三方信任機構 > - e.g. Let’s Encrypt、DigiCert、中華電信 ## 憑證申請與簽發(Server 端 + CA 端作業) 🖥️ Server: 1. 產生一對 RSA 金鑰(私鑰 privkey.pem + 公鑰) ```bash openssl genrsa -out privkey.pem 2048 ``` 2. 根據私鑰產生一份 CSR(憑證簽署請求),內含: - 公鑰 - 網域資訊(如 example.com) ```bash openssl req -new -key privkey.pem -out cert.csr ``` 3. 將 cert.csr 提交給 CA(例如中華電信、Let’s Encrypt、DigiCert) 🏛️ CA: 1. 網域所有權驗證(防止偽造) - DNS 驗證:新增 TXT 紀錄 - HTTP 驗證:上傳驗證檔案至指定網址 - Email 驗證:確認信箱 2. 驗證成功後,CA: - 用「中介 CA 的私鑰」對 CSR 進行數位簽章 - 產出你的網站憑證(Server Certificate) 3. CA 將憑證組合後回傳完整 憑證鏈 給你: - Server Certificate(你網站的憑證) - Intermediate Certificate(中介 CA) ## 憑證部署(Server 端): - 將憑證鏈與私鑰部署至 Web Server(如 Nginx) - 設定範例如下: ```nginx ssl_certificate fullchain.pem; # 包含網站憑證 + 中介憑證 ssl_certificate_key privkey.pem; # 你自己的私鑰 ``` - Cloud service(如 Vercel、CloudFront)會幫你自動完成這步(包含自動續期) ⸻ ## 憑證驗證流程(Client 端) 🌐 當使用者的瀏覽器連上網站時,Server 回傳: - Server Certificate(你的網站憑證) - Intermediate Certificate(由 CA 提供) 🔍 Browser 驗證流程(憑證鏈): 1. 用 Root CA 的公鑰驗證中介憑證的簽名 2. 用中介憑證的公鑰驗證你的網站憑證 3. 驗證成功 → HTTPS 建立 4. 若任一層驗證失敗(格式錯誤、Root 不被信任、過期等) → 顯示「不受信任的網站」錯誤 # 中華電信事件是哪個環節出錯了呢? Chrome 宣布自 2025 年 8 月 1 日起 不再信任 中華電信 Root CA,意味著所有由中華電信簽出的憑證(即使合法)都會失效,用戶端憑證鏈驗證失,會導致HTTPS 建立失敗,出現不安全警示畫面,我們可以換用受信任的 CA,如 Let’s Encrypt、DigiCert 等來解決此問題 # 如何查詢此網站的的憑證是用哪個CA呢? 可以用 openssl 或 Chrome 開發者工具看你目前網站使用的憑證鏈,這邊用我個人網站chih-han為例: ```bash openssl s_client -connect chih-han.com:443 -showcerts ``` 結果如下: ```bash Certificate chain 0 s:CN=chih-han.com i:C=US, O=Let's Encrypt, CN=R10 1 s:C=US, O=Let's Encrypt, CN=R10 i:C=US, O=Internet Security Research Group, CN=ISRG Root X1 ```