使用cypress查看网页证书

问题描述 投票:0回答:1

cypress中有没有办法查看页面证书信息? 手动,我们只需单击顶部面板中 URL 旁边的锁定图标,然后单击“证书”。 我希望在“发布者”部分运行断言。如果证书是由特定方颁发的,那么我的测试应该通过,否则应该失败。 如果有办法做到这一点,请指导我。 谢谢

cypress
1个回答
0
投票

经过多次尝试从 JS 构建的方法(如 TLSSocket 或库(如 puppeteer 或上面提到的库)获取有关服务器证书的信息,以获取该信息,我得出了当前的解决方案。这对我来说并不是一个真正合适的解决方案,但它确实有效。 3年多了,获取认证信息依然是个问题

我使用

cy.exec()
从系统中执行curl,该系统输出获取证书到期日期所需的信息。这里我使用了一个额外的命令来调用它。

要求:

  • curl 已安装在系统上

我的命令.js

Cypress.Commands.add('checkCertificate', (url, daysBeforeWarning = 14) => {
  const command = `curl ${url} -vI --stderr - | grep "expire date" | cut -d":" -f 2-`
  cy.exec(command).then((result) => {
    const expiryDate = result.stdout.trim()
    const expiryTime = new Date(expiryDate).getTime()
    const now = new Date().getTime()
    const warningDate = now + (daysBeforeWarning * 24 * 60 * 60 * 1000)

    cy.log(`Certificate expires on ${expiryDate}`)

    expect(warningDate).to.be.lessThan(expiryTime, `certificate do not expires in less than ${daysBeforeWarning} days`)
  })
})

在你的规范文件中你可以调用它:

it('check certificate', () => {
  cy.checkCertificate('https://stackoverflow.com')
})

它对 url 执行额外的 https 请求并获取信息。虽然有点慢,但对我来说很有效。仍然感觉像是一个解决方法。

这样您就可以检查您需要什么信息(例如发行人)并从您的curl请求的标准输出中grep它。

希望 Cypress 将来能够以某种方式包含此类信息。

HTH.

© www.soinside.com 2019 - 2024. All rights reserved.