cypress/base:17.3.0下Cypress报CertVerifyProcBuiltin错误解决方法
问题场景
基于cypress/base:17.3.0 Docker镜像运行Cypress测试时,测试用例可正常执行通过,但控制台会持续输出大量证书类报错,报错内容如下:
[33:0614/080128.399356:ERROR:cert_verify_proc_builtin.cc(681)] CertVerifyProcBuiltin for ws14.hotjar.com failed: ----- Certificate i=0 (OU=Cypress Proxy Server Certificate,O=Cypress Proxy CA,L=Internet,ST=Internet,C=Internet,CN=ws14.hotjar.com) ----- ERROR: No matching issuer found
报错原因
该报错由Chromium内置的证书校验逻辑触发:Cypress运行时会启动本地代理层拦截所有测试流量,自动为被拦截域名生成自签名代理证书;但cypress/base:17.3.0镜像内的Chromium默认信任存储没有预置Cypress的代理根证书,当页面加载Hotjar这类第三方服务发起的WebSocket请求时,就会打印「无匹配证书签发者」的错误。该报错不会阻塞测试逻辑,也不会导致用例失败。
修复方案
可根据实际测试场景选择对应方案解决:
方案1:关闭Chromium证书校验
该方案配置成本最低,适合不需要严格校验证书的测试场景。- 修改Cypress配置文件
cypress.config.js/cypress.config.ts,关闭web安全校验:
const { defineConfig } = require("cypress"); module.exports = defineConfig({ chromeWebSecurity: false, // 其余原有配置保持不变 })- 启动Cypress时添加启动参数,全局忽略证书错误:
cypress run --browser chrome --ignore-certificate-errors- 修改Cypress配置文件
方案2:将Cypress代理根证书导入系统信任链
该方案从根源解决证书信任问题,不会降低浏览器安全等级,适合对测试环境安全要求较高的场景。在项目Dockerfile中添加如下构建步骤即可:FROM cypress/base:17.3.0 # 保留原有安装依赖、拷贝项目代码等构建步骤 # 提取Cypress内置代理根证书,导入系统信任存储 RUN mkdir -p /usr/local/share/ca-certificates/cypress \ && npx cypress install > /dev/null 2>&1 \ && cp /root/.cache/Cypress/*/Cypress/resources/app/packages/network/lib/ca.pem /usr/local/share/ca-certificates/cypress/cypress-proxy-ca.crt \ && update-ca-certificates方案3:拦截无关第三方请求
如果测试流程不依赖Hotjar这类用户行为追踪、站点统计类第三方服务,可以直接在Cypress全局钩子中拦截对应域名的所有请求,直接返回空响应,从源头避免触发证书校验逻辑:// 在cypress/support/e2e.js(或对应支持文件)中添加全局拦截规则 beforeEach(() => { cy.intercept(/.*hotjar\.com.*/, { statusCode: 204, body: '' }) })
内容的提问来源于stack exchange,提问作者Michael Cherubini
相关产品推荐
相关产品推荐

