Gitlab-CI runner:忽略自签名证书

Eti*_*ier 16 go gitlab gitlab-ci gitlab-ci-runner gitlab-8

gitlab-ci-multi-runner register
Run Code Online (Sandbox Code Playgroud)

给我

couldn't execute POST against https://xxxx/ci/api/v1/runners/register.json:
Post https://xxxx/ci/api/v1/runners/register.json: 
x509: cannot validate certificate for xxxx because it doesn't contain any IP SANs
Run Code Online (Sandbox Code Playgroud)

有没有办法禁用认证验证?

我正在使用Gitlab 8.13.1和gitlab-ci-multi-runner 1.11.2.

lib*_*rce 28

基于Wassim的回答,以及关于tls-self-signed和自定义CA签名证书的gitlab文档,如果您不是gitlab服务器的管理员而只是带有跑步者的服务器(如果是跑步者),这里可以节省一些时间以root身份运行):

SERVER=gitlab.example.com
PORT=443
CERTIFICATE=/etc/gitlab-runner/certs/${SERVER}.crt

# Create the certificates hierarchy expected by gitlab
sudo mkdir -p $(dirname "$CERTIFICATE")

# Get the certificate in PEM format and store it
openssl s_client -connect ${SERVER}:${PORT} -showcerts </dev/null 2>/dev/null | sed -e '/-----BEGIN/,/-----END/!d' | sudo tee "$CERTIFICATE" >/dev/null

# Register your runner
gitlab-runner register --tls-ca-file="$CERTIFICATE" [your other options]
Run Code Online (Sandbox Code Playgroud)

更新1:证书需要是正确位置的绝对路径.

更新2:由于gitlab错误#2675,它可能仍然因自定义CA签名而失败

  • 恕我直言,这应该是公认的答案。这比重新创建证书/dhparam 和编辑服务器配置文件要好得多。 (2认同)

Lui*_*ias 7

在我的情况下,我通过添加.pem文件的路径来实现它,如下所示:

sudo gitlab-runner register --tls-ca-file /my/path/gitlab/gitlab.myserver.com.pem
Run Code Online (Sandbox Code Playgroud)

  • IMO 正确答案。我认为重要的唯一解释是如何获取服务器的 .PEM(或 .CRT)文件。我通过在 Firefox 上访问我的 GitLab 实例 URL 来做到这一点,然后单击地址栏中的锁定图标,导航到有关连接的“更多信息”、“安全性”、“查看证书”、“详细信息”,单击 GitLab在“证书层次结构”行,然后将证书“导出”为 PEM 文件。 (2认同)
  • 你是救命稻草! (2认同)

jfr*_*ndo 7

在我的设置中,以下内容也有效。重要的是用于创建证书的 IP/名称与用于注册运行器的 IP/名称相匹配。

gitlab-runner register --tls-ca-file /my/path/gitlab/gitlab.myserver.com.pem

此外,可能还需要在 runners config.toml 文件中添加一行用于主机名查找([runners.docker] 部分): extra_hosts = ["git.domain.com:192.168.99.100"] 另请参阅https://gitlab.com/gitlab-org/gitlab-runner/issues/ 2209

此外,如果使用 gitlab/gitlab-runner 网络模式主机,则可能会出现一些网络问题,也必须将其添加到 config.toml 中,因为它会启动其他容器,否则可能会出现问题连接到 gitlab-host (([runners.docker] 部分): network_mode="host"

最后,自签名 SSL 证书可能存在问题(https://gitlab.com/gitlab-org/gitlab-runner/issues/2659)。一个肮脏的解决方法是添加 environment = ["GIT_SSL_NO_VERIFY=true"] 到 [[runners]] 部分。


Was*_*hif 6

目前无法使用不安全的 ssl 选项运行多运行器。

GitLab 目前有一个关于此的未决问题。

您仍然应该能够获得您的证书,使其成为 PEM 文件并使用以下命令将其提供给 runner 命令 --tls-ca-file

要制作 PEM 文件,请使用 openssl。
openssl x509 -in mycert.crt -out mycert.pem -outform PEM


Eti*_*ier 6

好的,我一步一步地关注这篇文章http://moonlightbox.logdown.com/posts/2016/09/12/gitlab-ci-runner-register-x509-error然后它就像一个魅力.为防止死链接,我复制以下步骤:

首先在GitLab服务器上编辑ssl配置(而不是跑步者)

vim /etc/pki/tls/openssl.cnf

[ v3_ca ]
subjectAltName=IP:192.168.1.1 <---- Add this line. 192.168.1.1 is your GitLab server IP.
Run Code Online (Sandbox Code Playgroud)

重新生成自签名证书

cd /etc/gitlab/ssl
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/gitlab/ssl/192.168.1.1.key -out /etc/gitlab/ssl/192.168.1.1.crt
sudo openssl dhparam -out /etc/gitlab/ssl/dhparam.pem 2048
sudo gitlab-ctl restart
Run Code Online (Sandbox Code Playgroud)

将新CA复制到GitLab CI运行程序

scp /etc/gitlab/ssl/192.168.1.1.crt root@192.168.1.2:/etc/gitlab-runner/certs
Run Code Online (Sandbox Code Playgroud)

谢谢@Moon Light @Wassim Dhif


小智 5

以下步骤适用于我的环境。(Ubuntu)

下载证书
我无权访问 gitlab 服务器。所以,

  1. 在浏览器中打开https://some-host-gitlab.com(我使用 chrome)。
  2. 查看站点信息,通常是 URL 栏中的绿色锁。
  3. 通过导航到证书信息下载/导出证书(chrome、firefox 有这个选项)

在 gitlab-runner 主机中

  1. 使用 .crt 重命名下载的证书

    $ mv some-host-gitlab.com some-host-gitlab.com.crt

  2. 现在用这个文件注册跑步者

    $ sudo gitlab-runner register --tls-ca-file /path/to/some-host-gitlab.com.crt

我能够将跑步者注册到一个项目中。