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

GitLab CI发布npm包遇CA_CREATE_SIGNING_CERTIFICATE_ERROR报错求助

GitLab私有服务器CI发布npm包报错解决

问题背景

我有一台私有GitLab服务器,按照官方指南配置CI流水线发布npm包到项目仓库,Job配置如下:

npm:
  image: node
  id_tokens:
    SIGSTORE_ID_TOKEN:
      aud: sigstore
  variables:
    npm_config_cafile: $CI_SERVER_TLS_CA_FILE
    npm_config_registry: $CI_API_V4_URL/projects/$CI_PROJECT_ID/packages/npm/
  before_script: npm config set -- //$CI_SERVER_HOST/api/v4/projects/$CI_PROJECT_ID/packages/npm/:_authToken=$CI_JOB_TOKEN
  script:
    - npm config set strict-ssl false
    - npm publish

最初遇到错误:

npm error Provenance generation in GitLab CI requires 'SIGSTORE_ID_TOKEN' with 'sigstore' audience to be present in 'id_tokens'

添加id_tokens:SIGSTORE_ID_TOKEN:aud: sigstore后解决了该问题,但出现新错误:

npm error code CA_CREATE_SIGNING_CERTIFICATE_ERROR
npm error error creating signing certificate - (400) There was an error processing the identity token
npm error cause (400) There was an error processing the identity token

GitLab实例使用自定义CA证书,尝试设置npm_config_cafile和关闭strict-ssl无效,调试日志显示sigstore的fulcio服务请求失败:

notice Publishing to https://my-gitlab.myserver.com/api/v4/projects/1234/packages/npm/ with tag latest and public access
http fetch POST https://fulcio.sigstore.dev/api/v2/signingCert attempt 1 failed with 400

移除SIGSTORE_ID_TOKEN会回到最初的错误,求解决方法。


解决步骤

1. 让sigstore请求信任自定义CA证书

npm_config_cafile仅作用于npm仓库请求,sigstore相关请求(如fulcio)不会读取这个配置。需要将自定义CA证书添加到系统信任根:
修改before_script,添加证书导入步骤:

before_script:
  - npm config set -- //$CI_SERVER_HOST/api/v4/projects/$CI_PROJECT_ID/packages/npm/:_authToken=$CI_JOB_TOKEN
  - cp $CI_SERVER_TLS_CA_FILE /usr/local/share/ca-certificates/custom-ca.crt
  - update-ca-certificates

这样Node.js发起的所有HTTPS请求(包括sigstore服务)都会信任该CA证书。

2. 禁用Provenance生成(快速绕过)

如果不需要npm包的溯源(Provenance)功能,直接在发布命令中禁用它,无需配置SIGSTORE_ID_TOKEN:
修改script中的publish命令:

script:
  - npm config set strict-ssl false
  - npm publish --provenance false

同时可以删除id_tokens配置块,避免不必要的认证流程。

3. 检查GitLab ID Token配置

确保私有GitLab服务器允许生成受众为sigstore的ID令牌:

  • 管理员后台进入Settings > CI/CD > Token authentication settings,确认ID tokens功能已启用。
  • 项目级CI/CD配置中,确保没有限制ID令牌的受众范围。

4. 验证网络连通性

确认GitLab Runner可以正常访问fulcio.sigstore.dev,没有被防火墙、代理拦截:

  • 若使用代理,在CI变量中设置HTTP_PROXY、HTTPS_PROXY,并确保代理放行sigstore相关域名。
  • 在Job中添加curl https://fulcio.sigstore.dev命令测试连通性。

内容的提问来源于stack exchange,提问作者jeremywat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 09:47:44