我正在Linux(CentOS)下以无头模式运行自动化测试。
我得到了一个网站,我需要提供一个SSL证书的HTTP SSL客户端认证。文件是.p12格式,我安装了它在两台机器上相同的方式(虚拟机运行CentOS与UI,另一个是一个正常的无头服务器,再次运行CentOS)。
我使用pk 12 util在浏览器商店中安装了证书,确认安装成功,然后添加了Chrome自动为有问题的网站使用证书的策略。
现在有趣的事情开始了。在我有UI的VM中,我以headful模式运行浏览器,一切都很完美。然而,当我在任何一台机器上以headless模式运行浏览器时,我需要它为服务器运行headless,我在驱动程序日志中得到以下错误:
[DEBUG]: DevTools WebSocket Response: Page.navigate (id=18) 5944A53229353F1849E7D2D15FA4A11C {
"errorText": "net::ERR_SSL_PROTOCOL_ERROR",
"frameId": "5944A53229353F1849E7D2D15FA4A11C",
"loaderId": "4F3404B14470DD65090915C651B3D3EC"
}
...
[cf5020dd474256cce9c41538b1ffa0c2] RESPONSE Navigate ERROR unknown error: net::ERR_SSL_PROTOCOL_ERROR
在headless模式下运行时,我打开了调试端口9222,然后在Network选项卡中看到请求失败,并显示错误“Failed to load response data:找不到具有指定识别项''的资源。
在安装SSL证书之前,我在headful模式下也遇到了同样的错误,但当我安装证书并添加策略时,它就消失了,这让我想到,不管出于什么原因,无头Chrome找不到证书。
我错过了什么吗?我们可以在无头模式下提供SSL客户端证书吗?有人有什么建议吗?
谢谢!
PS:在headless模式下,浏览器启动时会显示常见的标志:接受不安全证书=真,--忽略证书错误,--忽略URL获取器证书请求。
我在CentOS 7.9和Chrome v.99下运行
1条答案
按热度按时间uyto3xhc1#
其实我找到答案了。
不幸的是,它不起作用!
这一切都将在下一期中解释。
版本号1310715:Headless Chrome浏览器不使用从应用商店安装的客户端(身份验证)证书。
此问题显示重现的步骤。
用户代理:Mozilla/5.0( windows NT 10.0; Win 64; x64)苹果网络工具包/537.36(KHTML,类似于壁虎)Chrome浏览器/99.0.4844.82 Safari浏览器/537.36
重现问题的步骤:
在Web服务器后面有一个网站,该网站使用SSL证书进行浏览器客户端验证。将证书安装在Chrome的证书存储区中的$HOME/pki/nssdb文件夹下。我的证书是pk 12格式的,所以我使用pk 12 util安装它。安装必须退出,并显示:“pk 12 util:PKCS 12 IMPORT SUCCESSFUL”消息。将策略添加到您的网站的/etc/opt/chrome/policies/managed下,以便Chrome自动向站点的Web服务器提供证书。打开网站。预期行为是什么?当浏览器在headless或headful模式下启动时,浏览器应向Web服务器提供证书并继续。
出现了什么问题?只有在headful模式下浏览器才会向Web服务器提供证书。Headless模式下不会。日志中有此错误:
问题响应声明如下:
Headless Chrome目前还没有实现客户端证书。将其切换到一个特性请求,以便headless用户可以进行分类。从机械上讲,客户端证书是通过CreateClientCertStore和SelectClientCertificate从//内容中产生的。Headless没有显示UI的方法,所以它总是在没有客户端证书的情况下继续运行。
https://bugs.chromium.org/p/chromium/issues/detail?id=1310715&q=component%3AInternals%3EHeadless&can=2