要让浏览器信任自签名的 CA(认证机构)证书,我们需要将这个 CA 证书导入到浏览器的信任证书库中。具体来说,这个 CA 证书将充当信任根证书(Root Certificate),浏览器信任后,它就会信任由该 CA 签发的其他证书。
1. 生成 CA 根证书
首先,我们生成一个自签名的 CA 根证书,用于签署其他服务器证书。
使用 OpenSSL 生成 CA 根证书
假设我们使用 OpenSSL 生成 CA 根证书:
# 生成 CA 私钥
openssl genpkey -algorithm RSA -out myCA.key -pkeyopt rsa_keygen_bits:2048
# 生成自签名的 CA 证书,有效期为 10 年
openssl req -x509 -new -nodes -key myCA.key -sha256 -days 3650 -out myCA.pem
myCA.key
:CA 的私钥,用于签署其他证书。myCA.pem
:CA 的自签名证书,可以导入到浏览器的信任证书库。
在执行此命令时,你会被要求提供一些信息(如国家、组织、Common Name 等),这些信息将用于 CA 证书的主体(Subject)。
2. 在浏览器中导入 CA 根证书
要让浏览器信任此 CA 证书,需要将 myCA.pem
导入到系统或浏览器的证书管理器中,步骤可能因操作系统和浏览器不同。
在 Windows 中导入证书
- 双击
myCA.pem
文件,打开证书导入向导。 - 选择“本地计算机”作为存储位置,然后继续。
- 将证书安装到“受信任的根证书颁发机构”。
- 完成导入,浏览器将信任该 CA 证书。
在 macOS 中导入证书
- 打开“钥匙串访问”(Keychain Access),在应用程序 > 实用工具中找到。
- 选择“系统”钥匙串。
- 点击“文件” > “导入项目”,选择
myCA.pem
。 - 导入后,右键点击该证书,选择“获取信息”,将其设置为“始终信任”。
在 Linux 中导入证书
-
将
myCA.pem
文件复制到系统的 CA 存储目录,通常在/usr/local/share/ca-certificates/
。 -
使用以下命令更新 CA 库:
sudo cp myCA.pem /usr/local/share/ca-certificates/myCA.crt sudo update-ca-certificates
在浏览器中导入证书
如果只希望在特定浏览器中使用信任证书,可以在浏览器设置中导入:
- Google Chrome / Firefox:
- 打开浏览器设置,找到“隐私与安全” > “证书”或“安全”。
- 选择“管理证书” > “导入”。
- 选择
myCA.pem
,并将其添加到“受信任的根证书颁发机构”。
- 重启浏览器以使更改生效。
3. 使用 CA 证书签署服务器证书
CA 根证书导入成功后,我们可以使用该 CA 证书为需要的域名签署服务器证书。签署的服务器证书将自动受到信任。
生成服务器证书并使用 CA 签署
-
生成服务器私钥和证书请求 (CSR)
openssl genpkey -algorithm RSA -out server.key -pkeyopt rsa_keygen_bits:2048 openssl req -new -key server.key -out server.csr
-
使用 CA 证书签署服务器证书
openssl x509 -req -in server.csr -CA myCA.pem -CAkey myCA.key -CAcreateserial -out server.crt -days 365 -sha256
server.crt
就是服务器证书,由自签的 CA 证书签发。
-
配置服务器:将
server.key
和server.crt
配置到你的 HTTPS 服务器(如 Nginx、Apache 或 Golang 的 TLS 服务器)上。
4. 验证浏览器信任
此时,当浏览器访问使用 server.crt
的服务器时,应看到 HTTPS 是绿色安全的,而不会再显示“证书不受信任”的警告。
总结
- 生成一个自签名的 CA 证书。
- 将 CA 证书导入系统或浏览器的信任证书库。
- 使用 CA 证书签署服务器证书。
- 配置 HTTPS 服务器并验证浏览器信任。
通过以上步骤,你的浏览器将信任由这个 CA 证书签发的所有服务器证书。