证书

证书

每当我使用 Google Chrome 的安全代理时ERR_PROXY_CERTIFICATE_INVALID,我都会尝试很多不同的场景和版本。

证书

我正在使用自签名证书:

openssl genrsa -out key.pem 1024
openssl req -new -key key.pem -out request.pem
openssl x509 -req -days 30 -in request.pem -signkey key.pem -out certificate.pem

笔记:当我尝试设置一个简单的 HTTPS 服务器时,此证书可以工作(但由于它是自签名的,因此会出现警告)。

代理

然后我在 上启动安全代理localhost:8080。有几种方法可以实现这一点,我尝试过:

浏览器

然后我使用以下命令运行 Google Chrome:

google-chrome --proxy-server=https://localhost:8080 http://superuser.com

加载,例如,http://superuser.com

问题

我得到的是:

Error 136 (net::ERR_PROXY_CERTIFICATE_INVALID): Unknown error.

在窗口中,类似以下内容:

[13633:13639:1017/182333:ERROR:cert_verify_proc_nss.cc(790)] CERT_PKIXVerifyCert for localhost failed err=-8179

在控制台中。

笔记:这并不是抱怨证书不安全的大红色警告。


现在,我必须承认我相当n00b对于证书等问题,如果我遗漏了一些基本要点,请告诉我。

答案1

也许可以尝试将该证书导入系统的证书存储区并信任它。Chrome 使用操作系统来验证安全证书。

我认为,当代理证书无效时,Chrome 会给出错误而不是警告,这是可以理解的,因为代理功能可能是作为其网络组件的透明附加功能实现的。需要额外的 UI 来确认代理证书似乎不是一个有用的功能。

以下步骤可解决问题:

  1. 生成密钥和证书:

    openssl genrsa -out key.pem 1024
    openssl req -new -key key.pem -subj "/CN=localhost" -out req.pem
    openssl x509 -req -days 30 -in req.pem -signkey key.pem -out cert.pem
    

    请注意,唯一必填字段是CNCommonName)和必须与代理的域相同。

  2. 使用以下方法将证书添加到系统数据库certutil(来自 Debian 中的包libnss3-tools):

    certutil -d "sql:$HOME/.pki/nssdb" -A -n dummy -i cert.pem -t C
    

    dummy只是一个昵称,可以是任何东西,但一定要提供选项-t C

相关内容