Yuuki

Yuuki's Blog

Hacker. Code Enthusiast.
github
bilibili
twitter

深入理解 HTTPS 证書

TL;DR#

HTTPS 證書是一種數字證書,用於保護網站數據的安全傳輸,主要通過身份驗證和數據加密實現。證書類型包括 DV SSL、OV SSL 和 EV SSL,各有其應用場景和特性。瀏覽器通過一系列步驟檢查證書的有效性,並使用證書中的公鑰進行加密通信。此外,我們還可以通過命令行工具手動獲取和檢查網站的 HTTPS 證書,進而檢查網站的通用名稱(CN)和主題備用名稱(SAN)。

什麼是 HTTPS 證書?#

HTTPS 證書,也稱為 SSL 證書或 CA 證書,是一種數字證書,它的主要作用是保護網站數據的安全傳輸。這種證書能夠確保用戶與網站之間的通信過程中,數據不會第三方截取或篡改。同時,瀏覽器也能通過檢查證書來確認用戶訪問的網站是否真實可靠。

HTTPS 證書有什麼作用?#

HTTPS 證書的作用主要體現在以下兩個方面:

  1. 身份驗證:HTTPS 證書中包含了網站的身份信息。當用戶訪問一個使用了 HTTPS 證書的網站時,瀏覽器會檢查證書的有效性。如果證書有效,瀏覽器會顯示該頁面是安全的。如果證書無效或者被篡改,瀏覽器則會向用戶發出警告。
  2. 數據加密:HTTPS 證書可以在用戶的瀏覽器和服務器之間建立一個加密的通信通道,確保數據在傳輸過程中不會被第三方竊取或篡改,從而有效的保護用戶的隱私數據。

HTTPS 證書有哪些類型?#

HTTPS 的證書主要有以下幾種類型:DV SSL 證書(域名驗證型)、OV SSL 證書(組織驗證型),以及 EV SSL 證書(拓展驗證型)。

阿里雲中對不同證書類型的描述如下:

OV (Organization Validation) 證書

  • OV 證書是企業 SSL 證書的首選,通過企業認證確保代表企業 SSL 證書的真實性,拒絕網站風險。
  • OV 證書支持特殊域名的簽發,例如 gov、edu、.gov、.org、.jp(國家縮寫)等
  • OV 證書支持證書合併,多張證書(域名)合併簽發

DV (Domain Validation) 證書

  • DV 證書一般用於個人網站 / 測試使用,DV 證書簽發速度快、無需人工審核,確保域名驗證信息正確的情況下 1-15 分鐘就能簽發
  • DV 證書無法為特殊域名 / 公網 IP 簽發證書(例如:edu、.gov、.org、.jp(國家縮寫)等後綴的域名)
  • DV 證書無法將多個域名合併到一張證書內

EV (Extended Validation) 證書

  • EV 證書是最高級別的密碼安全等級、可信等級和權威等級,確保網站數據傳輸安全不洩漏
  • 優勢:杜絕非授權代申請證書情況

瀏覽器如何檢查 HTTPS 證書?#

當我們訪問一個網站時,瀏覽器檢查網站證書的流程通常包括以下幾個步驟:

  1. 請求證書:當你訪問一個 HTTPS 網站時,你的瀏覽器會向網站請求它的 HTTPS 證書。
  2. 檢查頒發者:瀏覽器會檢查證書的頒發者是否為可信任的證書辦法機構。如果不是,瀏覽器會顯示警告。
  3. 驗證證書:瀏覽器會驗證證書的有效性。包括檢查證書是否已經過期,以及證書的域名是否與你正在訪問的網站的域名匹配。
  4. 使用公鑰:如果證書有效,瀏覽器會使用證書中的公鑰來加密你發送給網站的信息。同時網站會使用對應的私鑰來解讀你發送的信息。

證書的域名是什麼?#

證書的域名,也被稱為 公共名稱 (Common Name)主題備用名稱 (Subject Alternative Name),是 HTTPS 證書中的一個重要部分。它表示了這個證書是為哪個網站頒發的。

公共名稱 (Common Name, CN) 是證書的主要標識符,通常是證書所保護的主機名,例如 www.example.com。在早期的 SSL 證書中,公共名稱是唯一可以用來標識證書所保護的域名的字段。並且公共名稱的值只能存在一個。

然而,隨著互聯網的發展,一個證書可能需要保護多個域名,這就引入了 主題備用名稱 (Subject Alternative Name, SAN)。SAN 是一個擴展字段,可以包含一個或多個域名或子域名。例如,一個證書的 SAN 可以包含 example.comwww.example.com 以及 mail.example.com,這樣一個證書就可以保護這三個域名。

有哪些類型的證書域名?#

HTTPS 證書的域名主要有以下幾種類型:

  1. 單域名 SSL 證書:這種證書只能保護一個具體的域名,無法保護其他的域名。例如,如果證書的 CN 或 SAN 中包含 example.com,那麼這個證書只能保護 example.com 網站。
  2. 多域名 SSL 證書:這種證書可以保護多個域名,這些域名需要在證書的主題備用名稱中列出 (ASN)。例如,如果證書主題備用名稱中包含 www.example.comexample.com 以及 sub.example.com,那麼這個證書將保護這三個網站。
  3. 通配符 SSL 證書:這種證書可以保護一個主域名及其所有的以一級子域名,但不能保護二級子域名或更深層次的子域名。例如,如果在 CN 或 SAN 中包含 *.example.com,那麼這個證書可以保護 example.com 及其所有的一級子域名的網站。

手動檢查網站的 HTTPS 證書#

在基於 Unix 的操作系統中,我們可以使用下面的命令來獲取目標網站的 SSL 證書:

website=example.com
echo | openssl s_client -servername $website -connect $website:443 2>/dev/null | openssl x509 -noout -text

在這個命令中:

  • openssl s_client -servername $website -connect $website:443 部分會啟動一個 SSL/TLS 客戶端並連接到指定的網站的 443 端口(HTTPS 默認端口)。-servername 參數用於指定 SNI(Server Name Indication),這是一個 TLS 擴展,用於在握手階段發送服務器名稱。
  • 2>/dev/null 這部分命令會把錯誤信息重定向到 /dev/null,也就是說,錯誤信息不會被顯示出來。
  • openssl x509 -noout -text 這部分命令會解析從 s_client 命令獲取的證書信息。-noout 參數表示不輸出編碼後的證書,-text 參數表示以文本形式顯示證書的詳細信息。

如果目標網站使用了 HTTPS 證書,這個命令將會返回證書的詳細信息,包括證書的版本,序列號,簽名算法,頒發者,有效期,主題,公鑰信息,擴展字段等。

檢查證書通用名稱和主題備用名稱#

在上述命令的輸出結果中查找 Subject: 行,你可以在這裡找到證書的通用名稱。

20240607_180859

查找 X509v3 Subject Alternative Name: 行,你可以在這裡找到證書的主題備用名稱。

20240607_181031

獲取證書唯一標識#

當我們需要獲取證書的唯一標識時,通常我們會使用證書的指紋(Fingerprint)。證書的指紋是通過對證書的 DER 編碼(一種二進制格式)應用特定的哈希算法(如 SHA-256)得到的。你可以通過以下命令查看證書的 SHA-256 指紋:

website=example.com
echo | openssl s_client -servername $website -connect $website:443 2>/dev/null | openssl x509 -noout -fingerprint -sha256

這個命令會返回類似於 SHA256 Fingerprint=XX:XX:XX:... 的輸出,其中的 XX:XX:XX:... 就是證書的 SHA-256 指紋,可以作為證書的唯一標識。每個證書的指紋都是唯一的,即使證書的其他信息(如主題或頒發者)相同,只要證書本身不同,其指紋就會不同。因此,指紋可以用來唯一地標識一個證書。如果兩個證書的指紋相同,那麼這兩個證書就是完全相同的。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。