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

Docker部署GitLab与Runner时x509证书验证失败问题咨询

解决GitLab Runner注册时x509证书IP SAN验证失败问题

首先,问题的核心很明确:你的自签名证书没有包含IP地址作为SAN(Subject Alternative Name)。浏览器访问时可能因为你手动忽略了证书警告,或是浏览器的验证逻辑相对宽松,但GitLab Runner基于Go语言的HTTP客户端对证书的SAN验证非常严格——当你用IP(192.168.1.46)访问GitLab时,证书里必须明确把这个IP列在SAN字段里,否则就会触发x509: cannot validate certificate for ... because it doesn't contain any IP SANs错误。

下面给你两种解决思路,优先推荐规范的证书修复方案,应急场景可以用禁用验证的方式:

方案一:重新生成包含IP SAN的自签名证书(推荐)

这是最安全合规的解决方式,步骤如下:

  1. 创建一个OpenSSL配置文件(比如命名为openssl.cnf),添加IP SAN的配置项:
    [req]
    distinguished_name = req_distinguished_name
    x509_extensions = v3_req
    prompt = no
    
    [req_distinguished_name]
    CN = 192.168.1.46  # 填写你的GitLab访问IP
    
    [v3_req]
    keyUsage = critical, digitalSignature, keyEncipherment
    extendedKeyUsage = serverAuth
    subjectAltName = @alt_names
    
    [alt_names]
    IP.1 = 192.168.1.46  # 明确指定GitLab的IP地址
    # 如果有域名访问需求,还可以添加DNS.1 = gitlab.yourdomain.com
    
  2. 用这个配置文件重新生成证书和私钥:
    openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout gitlab.key -out gitlab.crt -config openssl.cnf
    
  3. 替换GitLab容器内的证书文件(默认路径是/etc/gitlab/ssl/,如果用了Docker卷挂载,直接替换宿主机对应目录的文件即可),然后重启GitLab容器:
    docker restart gitlab
    
  4. 将新生成的gitlab.crt复制到GitLab Runner容器的证书信任目录(比如/etc/gitlab-runner/certs/),或者通过卷挂载让Runner直接读取宿主机的证书文件,最后重启Runner容器:
    docker restart gitlab-runner
    
  5. 重新注册Runner,此时证书验证就能正常通过了。

方案二:确保GitLab Runner完全禁用SSL验证(临时应急)

如果你之前尝试禁用验证没生效,大概率是配置没落实到位,需要注意两点:

  1. 注册阶段就要指定跳过验证:在注册Runner的命令里加上--tls-skip-verify参数,示例:
    gitlab-runner register --url https://192.168.1.46/ --registration-token YOUR_REG_TOKEN --tls-skip-verify
    
  2. 检查config.toml配置是否生效:注册完成后,打开Runner的config.toml文件,确保[[runners]]区块下存在tls_skip_verify = true且未被注释:
    [[runners]]
      name = "my-docker-runner"
      url = "https://192.168.1.46/"
      token = "YOUR_RUNNER_TOKEN"
      executor = "docker"
      tls_skip_verify = true  # 确认这一行存在并设置为true
      [runners.docker]
        # 其他Docker执行器配置...
    
  3. 修改配置后必须重启Runner容器,让新配置生效:
    docker restart gitlab-runner
    

⚠️ 注意:这种方式会跳过所有SSL证书验证,存在安全风险,仅适合测试环境临时使用,生产环境强烈推荐方案一。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:46:25