You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

K6向特定Endpoint发起Get请求时报x509证书错误的问题咨询

K6发起GET请求时触发TLS证书校验拦截的问题

作为K6新手,最初需求是通过K6发送GET请求,验证目标API的可用性。
执行测试脚本时会触发终止类的警告信息,初步判断报错逻辑和K6底层依赖的Go语言机制相关。
最终目标是顺利向目标endpoint发送GET请求,同时排查自身脚本是否存在操作失误,梳理其他可落地的可行方案。

原始测试脚本

import http from "k6/http";
import { check } from "k6";

export default function () {
  var url =
    "https://endpoint.example.to.cloud/api/reports/v1/SMOKETESTC6KP6NWX";

  var headerParam = {
    headers: {
      "Content-Type": "application/json",
    },
  };

  const response = http.get(url, headerParam);

  check(response, {
    "Response status reciving a 200 response ": (r) => r.status === 200,
  });

  let body = JSON.parse(response.body);
}

运行时输出的报错

WARN[0000] Request Failed error="Get \"https://endpoint.example.to.cloud/api/reports/v1/SMOKETESTC6KP6NWX\": x509: certificate relies on legacy Common Name field, use SANs or temporarily enable Common Name matching with GODEBUG=x509ignoreCN=0"

对照验证结果

将目标endpoint替换为公开Mock接口地址时,脚本可正常运行无报错,替换的代码片段参考:

var url = "https://run.mocky.io/v3/16fa8113-57e0-4e47-99b9-b5c55da93d71";

已验证的本地可行操作

  • 给脚本的全局配置补充客户端证书、密钥的双向TLS认证配置,片段参考:
export let options = {
  tlsAuth: [
    {
      cert: open(`${__ENV.Certificate}`),
      key: open(`${__ENV.Key}`),
    },
  ],
};
  • 执行命令时追加跳过TLS校验的参数,完整执行命令示例(注意不要把脚本路径错放到-e参数后,-e仅用于传递键值对形式的环境变量):
k6 run -e Certificate=/home/cert/example_certification.crt -e Key=/home/cert/certification/example_key.key example.js --insecure-skip-tls-verify

补充说明:这类x509报错和脚本里的GET请求写法没有关系,根源是K6底层依赖的Go语言从1.15版本开始,默认不再兼容旧版证书的Common Name字段做域名匹配。目标服务端的证书没有按新版规范添加SAN(主题备用名称)域名标识,才触发了底层的安全拦截。
如果目标端暂时没法调整证书配置,除了加--insecure-skip-tls-verify跳过全量TLS校验之外,还可以在执行命令时通过环境变量开启旧版证书的兼容逻辑,保留必要的TLS校验强度,方案更稳妥,命令参考:
GODEBUG=x509ignoreCN=0 k6 run 你的脚本文件路径.js


内容的提问来源于stack exchange,提问作者Martin Jönsson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.27 14:45:01