Chrome浏览器的证书管理

当浏览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浏览器项目太赶或是人手不够所以还没有自己独立实现这一部分吧。
Tags: 

延伸阅读

最新评论

发表评论