Gitlab-CI runner: 忽略自签名证书
Gitlab-CI runner: ignore self-signed certificate
gitlab-ci-multi-runner register
给了我
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
有没有办法禁用证书验证?
我正在使用 Gitlab 8.13.1 和 gitlab-ci-multi-runner 1.11.2.
目前无法 运行 带有不安全 ssl 选项的 multi 运行ner。
目前在 GitLab 上有一个未解决的问题。
您仍然应该能够获得您的证书,将其制作成 PEM 文件并使用 --tls-ca-file
将其提供给 运行ner 命令
要制作 PEM 文件,请使用 openssl。
openssl x509 -in mycert.crt -out mycert.pem -outform PEM
好的,我一步一步地按照这个 post http://moonlightbox.logdown.com/posts/2016/09/12/gitlab-ci-runner-register-x509-error 然后它就像一个魅力。
为了防止死link我复制下面的步骤:
首先在 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.
重新生成自签名证书
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
将新 CA 复制到 GitLab CI runner
scp /etc/gitlab/ssl/192.168.1.1.crt root@192.168.1.2:/etc/gitlab-runner/certs
感谢@Moon Light @Wassim Dhif
根据 Wassim 的回答和 gitlab documentation about tls-self-signed and custom CA-signed certificates,如果您不是 gitlab 服务器的管理员,而只是 运行ners 的服务器的管理员(如果运行ner 是 运行 作为 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]
更新 1: CERTIFICATE
必须是证书文件的绝对路径。
更新 2:由于 gitlab-runner bug #2675
,自定义 CA 签名可能仍会失败
在我的例子中,我通过将路径添加到 .pem 文件来使其工作,如下所示:
sudo gitlab-runner register --tls-ca-file /my/path/gitlab/gitlab.myserver.com.pem
通常,gitlab-runners 托管在 docker 容器中。在这种情况下,需要确保 tls-ca-file
在容器中可用。
在我的设置中,以下内容也有效。重要的是 IP/Name 用于创建证书匹配 IP/Name 用于注册跑步者。
gitlab-runner register --tls-ca-file /my/path/gitlab/gitlab.myserver.com.pem
此外,可能还需要在运行程序 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 network-mode 主机,可能会有一些 network-trouble,它也必须添加到 config.toml 中,因为它启动额外的容器,否则可能无法连接到 gitlab-host(([runners.docker] 部分):
network_mode="host"
最后,self-signed SSL-Cert (https://gitlab.com/gitlab-org/gitlab-runner/issues/2659) 可能存在问题。
一个肮脏的解决方法是添加
environment = ["GIT_SSL_NO_VERIFY=true"]
到 [[跑步者]] 部分。
以下步骤适用于我的环境。 (Ubuntu)
下载证书
我无权访问 gitlab 服务器。因此,
- 在浏览器中打开https://some-host-gitlab.com(我用的是chrome)。
- 查看站点信息,通常是URL栏中的绿色锁。
- Download/Export 证书通过导航到证书信息(chrome,firefox 有这个选项)
在gitlab-runner主机中
将下载的证书重命名为 .crt
$ mv some-host-gitlab.com some-host-gitlab.com.crt
立即使用此文件注册跑步者
$ sudo gitlab-runner register --tls-ca-file /path/to/some-host-gitlab.com.crt
我能够将运行器注册到项目中。
gitlab-ci-multi-runner register
给了我
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
有没有办法禁用证书验证?
我正在使用 Gitlab 8.13.1 和 gitlab-ci-multi-runner 1.11.2.
目前无法 运行 带有不安全 ssl 选项的 multi 运行ner。
目前在 GitLab 上有一个未解决的问题。
您仍然应该能够获得您的证书,将其制作成 PEM 文件并使用 --tls-ca-file
要制作 PEM 文件,请使用 openssl。
openssl x509 -in mycert.crt -out mycert.pem -outform PEM
好的,我一步一步地按照这个 post http://moonlightbox.logdown.com/posts/2016/09/12/gitlab-ci-runner-register-x509-error 然后它就像一个魅力。 为了防止死link我复制下面的步骤:
首先在 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.
重新生成自签名证书
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
将新 CA 复制到 GitLab CI runner
scp /etc/gitlab/ssl/192.168.1.1.crt root@192.168.1.2:/etc/gitlab-runner/certs
感谢@Moon Light @Wassim Dhif
根据 Wassim 的回答和 gitlab documentation about tls-self-signed and custom CA-signed certificates,如果您不是 gitlab 服务器的管理员,而只是 运行ners 的服务器的管理员(如果运行ner 是 运行 作为 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]
更新 1: CERTIFICATE
必须是证书文件的绝对路径。
更新 2:由于 gitlab-runner bug #2675
,自定义 CA 签名可能仍会失败在我的例子中,我通过将路径添加到 .pem 文件来使其工作,如下所示:
sudo gitlab-runner register --tls-ca-file /my/path/gitlab/gitlab.myserver.com.pem
通常,gitlab-runners 托管在 docker 容器中。在这种情况下,需要确保 tls-ca-file
在容器中可用。
在我的设置中,以下内容也有效。重要的是 IP/Name 用于创建证书匹配 IP/Name 用于注册跑步者。
gitlab-runner register --tls-ca-file /my/path/gitlab/gitlab.myserver.com.pem
此外,可能还需要在运行程序 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 network-mode 主机,可能会有一些 network-trouble,它也必须添加到 config.toml 中,因为它启动额外的容器,否则可能无法连接到 gitlab-host(([runners.docker] 部分):
network_mode="host"
最后,self-signed SSL-Cert (https://gitlab.com/gitlab-org/gitlab-runner/issues/2659) 可能存在问题。
一个肮脏的解决方法是添加
environment = ["GIT_SSL_NO_VERIFY=true"]
到 [[跑步者]] 部分。
以下步骤适用于我的环境。 (Ubuntu)
下载证书
我无权访问 gitlab 服务器。因此,
- 在浏览器中打开https://some-host-gitlab.com(我用的是chrome)。
- 查看站点信息,通常是URL栏中的绿色锁。
- Download/Export 证书通过导航到证书信息(chrome,firefox 有这个选项)
在gitlab-runner主机中
将下载的证书重命名为 .crt
$ mv some-host-gitlab.com some-host-gitlab.com.crt
立即使用此文件注册跑步者
$ sudo gitlab-runner register --tls-ca-file /path/to/some-host-gitlab.com.crt
我能够将运行器注册到项目中。