我正在设置一台专用机器来自动执行我的 Web 应用程序的浏览器基准测试。这需要使用 HTTP/2,而 HTTP/2 需要 SSL 连接,因此我创建了一个自签名 CA 和证书供我的本地 https 服务器使用。
我将自签名证书添加到 Debian,似乎一切正常。Chrome 似乎在 Linux 上使用内置证书存储,您可以通过其 GUI 进行添加。
问题是,我的环境是运行 Debian 的 VPS,因此我无法访问 Chrome UI 来通过其 UI 添加证书。
我已使用以下命令将自签名根证书安装到我的系统中:
$ sudo cp localhost.crt /usr/local/share/ca-certificates/localhost.crt
$ sudo update-ca-certificates
Updating certificates in /etc/ssl/certs...
1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
现在,当通过以下方式访问服务器时curl
,请求信任自签名证书
$ curl https://localhost:3000
<html></html>
但是,当通过 Puppeteer 使用无头 Chrome 时,Chrome 不会接受证书并退出。
我知道我可以将 Puppeteer 配置为忽略 SSL 警告 - 这确实会导致不同的浏览器行为(特别是在缓存方面),因此我无法将它用于我的用例(自动性能基准测试)。
我知道在 Linux 下,Chrome 使用内置证书存储。是否可以通过终端添加到该存储?
编辑:
我尝试使用certutil
按照以下说明使用这个帖子
$ certutil -d sql:$HOME/.pki/nssdb -A -t P -n localhost -i /usr/local/share/ca-certificates/localhost.crt
-d
是数据库,我已验证它sql:$HOME/.pki/nssdb
存在。-A
将证书添加到数据库,-t P
表示将其标记为“受信任对等方”,-n
是证书的昵称,-i
是证书路径。
但是重新运行 Puppeteer 进程后,它仍然没有接受证书。重新启动计算机似乎没有任何改变。
编辑:
以下命令有效。-t CP
将证书添加为受信任的对等方和 CA。我不知道逗号是什么意思。
$ certutil -d sql:$HOME/.pki/nssdb -A -t "CP,CP," -n localhost -i /usr/local/share/ca-certificates/localhost.crt
答案1
以下命令有效。
首先确保certutil
安装了:
sudo apt install libnss3-tools
然后将证书添加到数据库:
$ certutil \
-d sql:$HOME/.pki/nssdb \
-A \
-t "CP,CP," \
-n localhost \
-i /usr/local/share/ca-certificates/localhost-ca.crt
-t CP
将证书添加为受信任的对等方和 CA。我不知道逗号是什么-t "CP,CP,"
意思,但没有它们就无法工作。