【问题标题】:cypress - 403 forbidden error when visiting main sitecypress - 访问主站点时出现 403 禁止错误
【发布时间】:2018-12-11 03:16:00
【问题描述】:

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

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

【问题讨论】:

  • 能否请您添加一个最小代码示例?

标签: javascript ssl-certificate cypress


【解决方案1】:
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() 请求转发到 host:'my-domain-name' 并附加 PKI。

出于某种原因,无论赛普拉斯在后台做什么,都会阻止赛普拉斯浏览器在 PKI 证书上加载/转发。您可能还需要使用 cert utils https://www.systutorials.com/docs/linux/man/1-certutil/ 在执行服务器 db 上安装证书。 CY 电子浏览器将自动加载安装在 db 上的证书,因此重要的是,您只有在那里拥有有权访问被测应用程序的证书。当想要在 CI 管道中运行时,这一切都可以在 Ansible 中完成。这是一个痛苦的设置,涉及一些团队的努力和一个喜欢参与测试的伟大开发人员。赛普拉斯已经证明是值得所有努力的,所以如果你现在还没有解决它,希望你重新考虑使用。

【讨论】:

  • 问题....自从这个问题得到解答后,我知道它的蜜蜂有一段时间了,但我可以指向 PEM 文件而不是 pfx 吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-09
  • 2020-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多