當前位置:
首頁 > 最新 > 如何讓chrome信任自簽名證書?

如何讓chrome信任自簽名證書?

在《初識NSS,一文了解全貌》這篇文章詳細介紹了 NSS 密碼庫,很多開發者也許沒聽說過 NSS,但都知道 NSS 密碼庫中的可信任根證書庫(cert9.db或者cert8.db),很多軟體和服務都可以引用 NSS 的可信任證書庫。作為目前最流行的瀏覽器 Chrome和Firefox,他們在不同的平台也可以使用 NSS 可信任根證書庫,所以本文就聊聊相關知識,讓大家對 NSS 密碼庫有更深刻的理解,理解可信任根證書庫對於理解 HTTPS 協議非常重要。

本文要回答的幾個主題:

你知道 Chrome 使用的根證書庫來自哪兒嗎?

你知道 Firefox 使用的根證書庫來自哪兒嗎?

你知道如何生成自簽名證書嗎?

你知道如何導出證書嗎?

你知道如何在 Chrome 和 Firefox 中更新證書嗎?

由於內容比較多,所以本文分兩篇文章講解,第一篇主要講解 NSS 和 windows 的根證書庫,並且介紹如何在 Chrome 中更新根證書。第二篇講解如何更新 NSS 根證書庫,如何更新 Firefox 使用的根證書庫。

先入為主,下面表格列舉了不同平台、不同瀏覽器引用可信任證書庫的一些情況。


在連接一個 HTTPS 網站的時候,伺服器會發送證書鏈,但光有證書鏈,客戶端是不能完成證書校驗的,必須有一張根證書才能迭代完成簽名認證,也就是說客戶端必須信任根證書才能構建信任基礎,那麼根證書在哪兒呢?

在 windows 平台中,微軟有專門的根證書庫。

在 Linux 平台中,軟體和服務一般使用 NSS 根證書庫。

在蘋果平台中,也有專門的根證書庫。

各個 CA 機構為了開展業務,必須申請將自己的根證書嵌入到各個平台中,如果申請被拒絕,CA 機構將無法開展業務。

在開源軟體領域,NSS 根證書庫是最流行的,所以很多軟體和服務會使用 NSS 根證書庫,原因何在?關鍵就在於透明性,NSS 在審核方面做的很嚴格,堅決杜絕非法 CA 根證書的存在。

對於普通用戶和開發者來說,一般情況下接觸不到可信任根證書庫,但是有些情況下,也有可能希望更新本地的可信任根證書庫,比如:

(1)在開發環境中應該避免使用線上證書,因為證書和私鑰一起保存,由於開發環境比較混亂,容易泄露私鑰,從而帶來安全風險。

在這種情況下,可以生成一張自簽名證書,由於瀏覽器不信任該證書,訪問網站的時候總會提示安全風險,為了避免頻繁的提示,可以手動將證書添加到瀏覽器的可信任根證書庫中。

(2)企業內部構建一個私有 CA,然後給自己的業務簽發證書,這種情況很常見,比如一些內部管理系統完全可以使用自簽發的證書,減少證書申請成本,為避免員工訪問的時候提示安全風險,可以將證書添加到瀏覽器的可信任根證書庫中。


在 NSS 可信任根證書庫中,所有數據保存在 cert9.db(cert9.db, key4.db, and pkcs11.txt)或者 cert8.db(cert8.db, key3.db, secmod.db)中,從 Firefox 58 版本後使用的是 cert9.db,比如在我的 windows 10 系統中,cert9.db 文件保存在 「C:UsersusernameAppDataRoamingMozillaFirefoxProfilesptayekv6.default」 目錄下。

那麼 cert9.db 和 cert8.db 區別在哪兒呢,這是兩種不同的數據格式。cert9.db 代表 SQLite 資料庫,而 cert8.db 代表 legacy security 資料庫。

使用 certutil 命令行工具可以管理 NSS 證書,安裝很簡單:

首先通過下令命令查看 cert9.db 文件中包含那些根證書:

其中 -d 參數表示在那給目錄尋找 cert9.db 文件,-L 顯示該文件中含有的證書文件,輸出如下圖:


微軟的 CryptoAPI 也非常流行,和 NSS 一樣,都是密碼學底層代碼庫,也包含系統根證書庫,IE、Edge、Windows 平台的 Chrome 用的都是微軟的系統根證書庫。

微軟的系統根證書庫保存在註冊表中,由於 windows 電腦是一個多用戶操作系統,且允許組策略管理,所以根證書庫存在於多個位置,比如:

CERT_SYSTEM_STORE_CURRENT_USER,代表當前登陸用戶,對應的證書存儲在 HKEY_CURRENT_USERSoftwareMicrosoftSystemCertificates 目錄。

CERT_SYSTEM_STORE_LOCAL_MACHINE,代表本機,對應的證書存儲在 HKEY_LOCAL_MACHINESoftwareMicrosoftSystemCertificates 目錄。

CERT_SYSTEM_CURRENT_USER_GROUP_POLICY,代表當前用戶組策略,對應的證書存儲在 HKEY_CURRENT_USERSoftwarePoliciesMicrosoftSystemCertificates 目錄。

一般情況下,windows 系統的登陸用戶使用的根證書庫保存在 CERT_SYSTEM_STORE_CURRENT_USER,微軟提供了一個 certmgr 工具管理根證書(實際上操作的是註冊表),在 cmd 命令提示符中輸入 certmgr 打開證書管理工具,如下圖:

對於我們來說,最要關心是「受信任的根證書頒發機構」,所有根證書都存儲在這個目錄下,可以通過 certmgr 工具和 certmgr 命令行添加或刪除根證書。


在 windows 系統中,Chrome 使用的是 Windows 根證書庫,如果需要更新,可以有兩種方式,第一種就是使用 certmgr 管理證書。第二種是要重點介紹的,就是使用 Chrome 功能菜單更新證書,實際上該功能菜單就相當於執行 certmgr 管理操作,只是將該功能集成到 Chrome 中。

首先我們從線上獲取一張自簽名證書(生成自簽名證書方法見本文下一篇),比如訪問 https://www.test.com,然後打開 Chrome 開發者工具(F8),選擇【Security】-【View Certificate】,然後一步步如下圖導出自簽名證書,並保存為 test.cer,注意保存為 .cer 格式。

接下來就是將該證書導入到根證書庫中,有兩種方式,第一種是雙擊 test.cer 文件,然後一步步將證書導入;另外中就是通過 Chrome 功能菜單導入,首先打開【設置】-【管理證書】菜單,然後如下圖導入,注意選擇將證書保存到受信任的根證書頒發機構。

重啟 Chrome 後,然後訪問 https://www.test.com,是不是沒有安全警告了?

如果你想了解我的新書《深入淺出HTTPS:從原理到實戰》,可以閱讀我寫了一本書《深入淺出HTTPS:從原理的實戰》。

如果你對密碼學&HTTPS協議,Web後端開發(LAMP平台)、PHP&Python感興趣,可以關注我的公眾號(yudadanwx)。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 虞大膽的嘰嘰喳喳 的精彩文章:

strace幫助你調試PHP代碼

TAG:虞大膽的嘰嘰喳喳 |