Chrome瀏覽器的證書管理
作者:千里孤行(http://blog.csdn.net/codenerd)
當瀏覽HTTPS開頭的網站時,網站的服務器會發一個數字證書過來,瀏覽器和人需要對其做有效性驗證。這個過程中,需要從本地的證書庫裏頭找出證書的頒發機構(certificate authority ,CA)的證書來對網站服務器的證書做驗證。這些CA的證書是瀏覽器廠商預裝的或是用戶後來設置導入的。
不過Google的Chrome瀏覽器比較特別,不像其他 獨立瀏覽器Firefox, Opera這些有自己獨立的證書庫。Chrome瀏覽器的證書管理,其實就是不管理。Chrome瀏覽器跟IE瀏覽器一樣,使用Windows系統的那一攬子東西。
當點擊Chrome的“高級選項->管理證書”時,Chrome直接把IE那個證書管理對話框彈出來了:
下載了Chrome瀏覽器的源碼下來看。挺龐大的,壓縮包就800多M,解壓後2G多。
找到用戶界面 高級設置 部分的代碼:
Advanced_contents_view.cc (chromium/src/chrome/browser/views/options)
當用戶“管理證書”按鈕按下事件的處理:
void SecuritySection::ButtonPressed(
views::Button* sender, const views::Event& event) {
} else if (sender == manage_certificates_button_) {
UserMetricsRecordAction("Options_ManagerCerts", NULL);
CRYPTUI_CERT_MGR_STRUCT cert_mgr = { 0 };
cert_mgr.dwSize = sizeof(CRYPTUI_CERT_MGR_STRUCT);
cert_mgr.hwndParent = GetWindow()->GetNativeWindow();
::CryptUIDlgCertMgr(&cert_mgr);
}
}
直接調一個CryptoAPI的函數,彈出一個IE的證書管理對話框就不理了,讓Windows自己去保存設置/處理。所以看到的效果跟IE一樣。
再看下SSL客戶端部分的代碼,
Ssl_client_socket_win.cc (chromium/src/net/socket)
基本上是這樣,當瀏覽HTTPS網站,需要驗證服務器證書的時候,Ssl_client調用了若干Windows的CryptoAPI 接口,來對證書做驗證:
CertOpenSystemStore()
InitializeSecurityContext (Schannel)
QueryContextAttributes (Schannel)
CertGetCertificateChain()
CertVerifyCertificateChainPolicy()
…
使用的是Windows的系統證書存儲區(system certificate store)。Chrome自己不需要管理CA。也許Chrome瀏覽器項目太趕或是人手不夠所以還沒有自己獨立實現這一部分吧。
-------------------------------------------------------------------------------------------------