如何让chrome信任自签名证书?

在《初识NSS,一文了解全貌》这篇文章详细介绍了 NSS 密码库,很多开发者也许没听说过 NSS,但都知道 NSS 密码库中的可信任根证书库(cert9.db或者cert8.db),很多软件和服务都可以引用 NSS 的可信任证书库。作为目前最流行的浏览器 Chrome和Firefox,他们在不同的平台也可以使用 NSS 可信任根证书库,所以本文就聊聊相关知识,让大家对 NSS 密码库有更深刻的理解,理解可信任根证书库对于理解 HTTPS 协议非常重要。

本文要回答的几个主题:

  • 你知道 Chrome 使用的根证书库来自哪儿吗?
  • 你知道 Firefox 使用的根证书库来自哪儿吗?
  • 你知道如何生成自签名证书吗?
  • 你知道如何导出证书吗?
  • 你知道如何在 Chrome 和 Firefox 中更新证书吗?

由于内容比较多,所以本文分两篇文章讲解,第一篇主要讲解 NSS 和 windows 的根证书库,并且介绍如何在 Chrome 中更新根证书。第二篇讲解如何更新 NSS 根证书库,如何更新 Firefox 使用的根证书库。

先入为主,下面表格列举了不同平台、不同浏览器引用可信任证书库的一些情况。

浏览器平台 Windows Unix
Chrome 使用 windows 可信任根证书库 使用 NSS 可信任根证书库
Firefox 使用 NSS 可信任根证书库 使用 NSS 可信任根证书库

什么是可信任根证书库

证书链
证书链

在连接一个 HTTPS 网站的时候,服务器会发送证书链,但光有证书链,客户端是不能完成证书校验的,必须有一张根证书才能迭代完成签名认证,也就是说客户端必须信任根证书才能构建信任基础,那么根证书在哪儿呢?

  • 在 windows 平台中,微软有专门的根证书库。
  • 在 Linux 平台中,软件和服务一般使用 NSS 根证书库。
  • 在苹果平台中,也有专门的根证书库。

各个 CA 机构为了开展业务,必须申请将自己的根证书嵌入到各个平台中,如果申请被拒绝,CA 机构将无法开展业务。

在开源软件领域,NSS 根证书库是最流行的,所以很多软件和服务会使用 NSS 根证书库,原因何在?关键就在于透明性,NSS 在审核方面做的很严格,坚决杜绝非法 CA 根证书的存在。

对于普通用户和开发者来说,一般情况下接触不到可信任根证书库,但是有些情况下,也有可能希望更新本地的可信任根证书库,比如:

(1)在开发环境中应该避免使用线上证书,因为证书和私钥一起保存,由于开发环境比较混乱,容易泄露私钥,从而带来安全风险。

在这种情况下,可以生成一张自签名证书,由于浏览器不信任该证书,访问网站的时候总会提示安全风险,为了避免频繁的提示,可以手动将证书添加到浏览器的可信任根证书库中。

(2)企业内部构建一个私有 CA,然后给自己的业务签发证书,这种情况很常见,比如一些内部管理系统完全可以使用自签发的证书,减少证书申请成本,为避免员工访问的时候提示安全风险,可以将证书添加到浏览器的可信任根证书库中。

再一次解读 certutil 和 cert9.db

在 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:\Users\username\AppData\Roaming\Mozilla\Firefox\Profiles\ptayekv6.default" 目录下。

那么 cert9.db 和 cert8.db 区别在哪儿呢,这是两种不同的数据格式。cert9.db 代表 SQLite 数据库,而 cert8.db 代表 legacy security 数据库。

使用 certutil 命令行工具可以管理 NSS 证书,安装很简单:

# Debian/Ubuntu
$ apt-get install libnss3-tools 

# Fedora/cnetos
$ yum install nss-tools

首先通过下令命令查看 cert9.db 文件中包含那些根证书:

# 如果是 cert8.db 文件,不用加 sql:前缀
$ certutil -d sql:$HOME/.pki/nssdb/test -L  

其中 -d 参数表示在那给目录寻找 cert9.db 文件,-L 显示该文件中含有的证书文件,输出如下:

Certificate Nickname                     Trust Attributes
                                         ,,   
GlobalSign CloudSSL CA - SHA256 - G3                         ,,   
DigiCert SHA2 Secure Server CA                               ,,   
DigiCert SHA2 Extended Validation Server CA                  ,,   
Google Internet Authority G2                                 ,,   
GlobalSign Organization Validation CA - SHA256 - G2          ,,   
GeoTrust SSL CA - G3                                         ,,   
Symantec Class 3 Secure Server CA - G4                       ,,   
COMODO RSA Certification Authority                           ,,   
Google Internet Authority G3                                 ,,   
Let's Encrypt Authority X3                                   ,,   
Go Daddy Secure Certificate Authority - G2                   ,,   
Go Daddy Root Certificate Authority - G2                     ,,   
Amazon Root CA 1                                             ,,   
Starfield Services Root Certificate Authority - G2           ,,   
AlphaSSL CA - SHA256 - G2                                    ,,   
Certum Domain Validation CA SHA2                             ,,   
DigiCert SHA2 High Assurance Server CA                       ,,   
RapidSSL RSA CA 2018                                         ,,   
COMODO RSA Organization Validation Secure Server CA          ,,   
Amazon                                                       ,,     
DigiCert Global CA G2                                        ,,   
WoSign OV SSL CA                                             ,,   
GeoTrust RSA CA 2018                                         ,,  

Windows 根证书库

微软的 CryptoAPI 也非常流行,和 NSS 一样,都是密码学底层代码库,也包含系统根证书库,IE、Edge、Windows 平台的 Chrome 用的都是微软的系统根证书库。

微软的系统根证书库保存在注册表中,由于 windows 电脑是一个多用户操作系统,且允许组策略管理,所以根证书库存在于多个位置,比如:

  • CERT_SYSTEM_STORE_CURRENT_USER,代表当前登陆用户,对应的证书存储在 HKEY_CURRENT_USER\Software\Microsoft\SystemCertificates 目录。
  • CERT_SYSTEM_STORE_LOCAL_MACHINE,代表本机,对应的证书存储在 HKEY_LOCAL_MACHINE\Software\Microsoft\SystemCertificates 目录。
  • CERT_SYSTEM_CURRENT_USER_GROUP_POLICY,代表当前用户组策略,对应的证书存储在 HKEY_CURRENT_USER\Software\Policies\Microsoft\SystemCertificates 目录。

一般情况下,windows 系统的登陆用户使用的根证书库保存在 CERT_SYSTEM_STORE_CURRENT_USER,微软提供了一个 certmgr 工具管理根证书(实际上操作的是注册表),在 cmd 命令提示符中输入 certmgr 打开证书管理工具,如下图:

certmgr
certmgr

对于我们来说,最要关心是“受信任的根证书颁发机构”,所有根证书都存储在这个目录下,可以通过 certmgr 工具和 certmgr 命令行添加或删除根证书。

Chrome 如何在 windows 系统中更新证书

在 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,是不是没有安全警告了?

欢迎关注我的公众号(yudadanwx),了解我最新的博文和本书。
yudadanwx
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 148,827评论 1 317
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 63,511评论 1 266
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 99,318评论 0 218
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,108评论 0 189
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,112评论 1 266
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,387评论 1 185
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 30,905评论 2 283
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,657评论 0 177
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,144评论 0 223
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,744评论 2 225
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,100评论 1 236
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,565评论 2 222
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,041评论 3 216
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,769评论 0 9
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,301评论 0 178
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,173评论 2 239
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,313评论 2 242

推荐阅读更多精彩内容

  • 突然才明白,我是整合型的人才,所以对很多东西都有强烈的好奇心,但是无法深入,原来我不是要成为一个专业人才的,我是来...
    飞碟告诉你阅读 158评论 0 0
  • 偷吃 就是不讓家裡人看見是所做的活動 我沒有什麼大的志向 只是偶爾想念麻辣燙和辣條 雖然時長不知是胃疼還是膽疼 只...