Chrome瀏覽器的證書管理

 

Chrome瀏覽器的證書管理

 

 

作者:千里孤行(http://blog.csdn.net/codenerd)

 

當瀏覽HTTPS開頭的網站時,網站的服務器會發一個數字證書過來,瀏覽器和人需要對其做有效性驗證。這個過程中,需要從本地的證書庫裏頭找出證書的頒發機構(certificate authority ,CA)的證書來對網站服務器的證書做驗證。這些CA的證書是瀏覽器廠商預裝的或是用戶後來設置導入的。

 

不過GoogleChrome瀏覽器比較特別,不像其他 獨立瀏覽器Firefox, Opera這些有自己獨立的證書庫。Chrome瀏覽器的證書管理,其實就是不管理。Chrome瀏覽器跟IE瀏覽器一樣,使用Windows系統的那一攬子東西。

 

 

高級選項 

 

當點擊Chrome的“高級選項->管理證書”時,Chrome直接把IE那個證書管理對話框彈出來了:

 

  

 

管理證書 

 

下載了Chrome瀏覽器的源碼下來看。挺龐大的,壓縮包就800M,解壓後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調用了若干WindowsCryptoAPI 接口,來對證書做驗證:

 

CertOpenSystemStore()

InitializeSecurityContext (Schannel)

QueryContextAttributes (Schannel)

CertGetCertificateChain()

CertVerifyCertificateChainPolicy()

 

 

使用的是Windows的系統證書存儲區(system certificate store)Chrome自己不需要管理CA。也許Chrome瀏覽器項目太趕或是人手不夠所以還沒有自己獨立實現這一部分吧。

 

 

-------------------------------------------------------------------------------------------------

更多博文請訂閱RSS,更多微博請關注@千里孤行Nerd


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章