本文是如何在浏览器中更新证书的第二部分,第一部分内容请阅读《如何让chrome信任自签名证书》,主要以一个用户的角度解释如何在线获取自签名证书,并将该证书加入到 chrome 中;而对于开发者来说,更希望生成自签名证书,并部署到网站中,本文就是介绍如何生成自签名证书,并演示多种将证书添加到 firefox 中的方法。
使用 firefox 功能菜单更新证书
firefox 功能菜单能够直接添加证书,原理其实就是通过操作界面更新 cert9.db 文件。
打开【选项】->【隐私和安全】->【查看证书】菜单,如下图:
查看证书添加例外(浏览器会在线获取证书)后,浏览器(实际是 cert9.db )就添加了相应的证书,如下图:
添加例外需要注意的是,虽然浏览器信任了该证书,让你能够正常访问部署自签名证书的网站,但由于是一个自签名证书,浏览器仍然会提醒你该网站可能存在安全风险,警告形式如下图:
安全警告使用 certutil 更新证书库
首先介绍如何使用 openssl 工具生成自签名证书(cerutil 工具也可以),运行如下命令生成 csr 文件:
$ openssl req -new -sha256 -newkey rsa:2048 -nodes -subj '/CN=www.test.com/O=Test, Inc./C=CN/ST=Beijing/L=Haidian' -keyout example_key.pem -out example_csr.pem
其中 example_key.pem 表示私钥文件,example_csr.pem 文件将来要生成证书文件,公钥是一个 2048 比特长度的 RSA 公钥。
然后生成一个证书扩展文件,在本例中是 SAN 扩展,运行如下命令:
$ echo "subjectAltName=DNS:www.test.com > certext.ext
最后生成证书,运行如下命令:
$ openssl x509 -req -days 365 -in example_csr.pem -signkey example_key.pem -out example_cert.pem -extfile certext.ext
接下来使用 certutil 工具给 cert9.db 添加证书,在 NSS 中有三种证书,分别是 CA 根证书、中间证书、自签名证书。对应的操作命令如下:
# CA 根证书
$ certutil -d sql:$HOME/.pki/nssdb -A -t "C,," -n <certname> -i <certfile>
# 中间证书
$ certutil -d sql:$HOME/.pki/nssdb -A -t ",," -n <certname> -i <certfile>
# 自签名证书
$ certutil -d sql:$HOME/.pki/nssdb -A -t "P,," -n <certname> -i <certfile>
区别就在于 -t 对应的参数值,为什么要用逗号分割三个区域呢?三个区域分别代表该证书可用于 https 证书验证、email 证书验证、数字签名验证。
在本例中,想给 cert9.db 添加证书,运行如下命令:
$ certutil -A -n ywdblog@outlook.com -t "p,p,p" -i example_cert.pem -d sql:$HOME/.pki/nssdb
更新后,可以使用 certutil 工具验证是否添加成功,然后重新启动浏览器,看看效果。
firefox 使用 windows 系统根证书库
在 windows 系统中,firefox 也可以不使用 nss 根证书库,可以使用 windows 系统根证书库。
从 firefox 49 版本开始,可以启用 security.enterprise_roots.enabled 选项(默认是关闭的),firefox 就可以使用 windows 系统根证书库,具体操作如下。
在 firefox 地址栏中输入“about:config”,然后修改 security.enterprise_roots.enabled,具体如下图:
config但是需要注意的是,并不是开启该选项后就生效,firefox 49 以后的版本,会读取 windows CERT_SYSTEM_STORE_LOCAL_MACHINE 下的证书;firefox 52 以后的版本,还会读取 CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY 和 CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE 下的证书。
由于在 windows 下,用户的根证书都保存在 CERT_SYSTEM_STORE_CURRENT_USER 目录下,所以需要将该目录下的证书都拷贝到 CERT_SYSTEM_STORE_LOCAL_MACHINE 目录下,firefox 才会真正使用 windows 系统根证书库,这是需要注意的一点,至于采用这个策略的原因,比较让人困惑。
我最近写了一本书《深入浅出HTTPS:从原理到实战》,欢迎去各大电商购买,也欢迎关注我的公众号(yudadanwx),了解我最新的博文和本书。
qrcode_for_gh_27a6d90762d3_258.jpg
网友评论