赛普拉斯-访问主站点时出现403禁止错误

时间:2018-07-02 21:20:54

标签: javascript ssl-certificate cypress

我正在尝试cy.visit()单页应用程序,该应用程序要求我在浏览器中加载的证书才能正确运行。运行测试时,它失败并显示403禁止错误。有一个可怕的解决方法,我在cypress / chrome浏览器窗口中打开一个新选项卡,然后直接转到我的Web应用程序,这会提示我几次选择我的证书,然后加载页面。如果然后重新加载测试,它将以某种方式保留我的证书选择,并直接转到页面并运行测试。如果必须像before或beforeEach循环中那样执行第二个cy.visit(),则它将返回403禁止错误。启动cypress / chrome浏览器时,证书提示似乎正在破坏测试,因为它通常会提示您选择证书。由于自动执行此操作,因此永远不会出现提示,并且不会发送/加载证书等,并且会出现403。

有人遇到过这种情况,并且提出了比我的解决方法更好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

httpProxy.createProxyServer({
target: {
protocol: 'https:',
host: 'my-domain-name',
port: 443,
pfx: fs.readFileSync('path/to/certificate.p12'),
passphrase: 'password', },
changeOrigin: true,
}).listen(4440);

解决方案:

添加一个http代理服务器,并将PKI附加到传出请求上,因此说您将代理设置为侦听localhost:4440,那么现在您正在执行cy.visit(http://localhost:4440)。代理将visit()请求转发给主机:“ my-domain-name”,并附加PKI。

由于某种原因,赛普拉斯在幕后所做的一切都会阻止赛普拉斯浏览器在PKI证书上加载/转发。您可能还需要使用cert utils https://www.systutorials.com/docs/linux/man/1-certutil/在执行服务器数据库上安装cert。 CY电子浏览器将自动加载安装在数据库上的证书,因此,重要的是,您只能在该证书上拥有访问被测应用程序的权限。想要在CI管道中运行时,可以全部在Ansible中完成。这是一个痛苦的设置,需要一些团队的努力,并且是一位乐于参与测试的优秀开发人员。赛普拉斯已证明值得付出所有努力,因此,如果您现在还没有解决问题,那么请达夫希望您重新考虑使用它。