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


你可能感兴趣的:(AAA,网络编程)