目录
最近接到一个需求就是将根证书预置到浏览器中,也就是当用户直接安装浏览器访问https服务器的时候不会出现不信任的情况。由于某些浏览器的证书读取是从操作系统中读取的,因此可以使用预置根证书到操作系统中。从而内置根证书。
下面文章将帮助你解决这个问题。
方法一、操作系统内置证书
1. 编译前准备
// hg命令
sudo apt-get install mercurial
cd ~
mkdir nss
cd nss
// 获取源码
hg clone https://hg.mozilla.org/projects/nspr
hg clone https://hg.mozilla.org/projects/nss
2.编译
编译前准备
sudo apt install g++
sudo apt install zlib1g-dev
开始编译构建项目
nss/build.sh
make -C nss nss_build_all USE_64=1 -j16
3.下载根证书
我们这里以内置国密沃通根证书为例。当然其他的证书的方法也是一样的
https://www.wotrus.com/root/SM2_intermediateca.htm
4.证书格式转化
注意导入的证书的格式是der格式,因此需要将证书的格式专为der格式。
openssl x509 -outform der -in WoTrus-SM2.crt -out WoTrus-SM2.der
openssl x509 -outform der -in wtsm2_dv.crt -out wtsm2_dv.der
openssl x509 -outform der -in WoTrus-SM2_SSL_V3.crt -out WoTrus-SM2_SSL_V3.der
openssl x509 -outform der -in WoTrus-SM2_SSL_V4.crt -out WoTrus-SM2_SSL_V4.der
5.导入根证书
在nss目录中执行一下代码。导入国密SM2根证书
国密证书在nss目录中。
./nss/cmd/addbuiltin/Linux4.19_x86_64_cc_glibc_PTH_64_DBG.OBJ/addbuiltin -n 国密SM2根证书 -t "C,C,C" -i WoTrus-SM2.der >> ./nss/lib/ckfw/builtins/certdata.txt
删除否个已经信任的证书
./nss/cmd/addbuiltin/Linux4.19_x86_64_cc_glibc_PTH_64_DBG.OBJ/addbuiltin -D -n "" -i WoTrus-SM2.der
6.重编译
nss/build.sh
make -C nss nss_build_all USE_64=1 -j16
7.获取lib,替换系统so
sudo cp ./dist/Linux4.19_x86_64_cc_glibc_PTH_64_DBG.OBJ/lib/libnssckbi.so /usr/lib/x86_64-linux-gnu/nss
8. 浏览器代码分析
因为在crypto/nss_util.cc代码中,初始化时会加载libnssckbi.so内的根证书
9、测试结果
支持该方案预制证书到浏览器器中,只有chrome、Opera支持,统信浏览器、360浏览器、edge浏览器。
其余浏览不支持该方式预制。
测试浏览器如下:
奇安信可信浏览器、龙芯浏览器、qq浏览器、火狐浏览器。
1.后期导入的根证书存放在数据库中,数据库目录为
方法二 修改chromium浏览器代码
我们知道默认加载数据库的目录,将这个目录复制一次,放在别的目录中,再导入到浏览器中就可以了。
修改crypto/nss_util.cc代码
在NSSInitSingleton(){}中添加一下代码
//加载uos_nssdb
PK11SlotInfo* db_slot = SECMOD_OpenUserDB("configDir='sql:/usr/share/browser/.pki/uos_nssdb' tokenDescription='' flags=readOnly");
if (db_slot) {
if (PK11_NeedUserInit(db_slot))
PK11_InitPin(db_slot, nullptr, nullptr);
} else {
LOG(ERROR) << "Error initializing NSS with a persistent database (/usr/share/browser/.pki/uos_nssdb) : " << GetNSSErrorMessage();
}
国密根证书认证中心
-
中国电子认证有限公司(CEC):
- 中国电子认证有限公司是中国国家密码管理局(国密算法的发布机构)设立的电子认证服务公司。它在国密领域有很高的信誉,提供了一系列的国密证书服务。
-
中国人民银行金融认证中心:
- 金融认证中心是中国人民银行设立的金融行业CA中心,提供金融机构所需的数字证书服务,包括支持国密算法的证书。
-
CFCA(中国金融认证中心):
- 中国金融认证中心是一家提供数字证书服务的公司,也在国密领域提供相应的证书服务。