每当我使用 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
。有几种方法可以实现这一点,我尝试过:
- 一个习俗Node.js脚本;
- 隧道;
- 节点spdyproxy(好吧,这也涉及到SPDY,但后来...问题是一样的);
- [...]
浏览器
然后我使用以下命令运行 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 来确认代理证书似乎不是一个有用的功能。
以下步骤可解决问题:
生成密钥和证书:
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
请注意,唯一必填字段是
CN
(CommonName
)和必须与代理的域相同。使用以下方法将证书添加到系统数据库
certutil
(来自 Debian 中的包libnss3-tools
):certutil -d "sql:$HOME/.pki/nssdb" -A -n dummy -i cert.pem -t C
dummy
只是一个昵称,可以是任何东西,但一定要提供选项-t C
。