Лидер Gitlab-CI: игнорировать самозаверяющий сертификат

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.

Ответ 1

На основе ответа Wassim и документации gitlab о самозаверяющих и подписанных сертификатами CA здесь, чтобы сэкономить время, если вы не являетесь администратором сервера 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]

Обновление 1: сертификат должен быть абсолютным путем в правильном месте.

Обновление 2: он может все еще не работать с пользовательской подписью CA из-за ошибки gitlab-runner # 2675

Ответ 2

В моем случае я получил его работу, добавив путь к файлу .pem следующим образом:

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

Ответ 3

Хорошо, я сделал шаг за шагом этот пост http://moonlightbox.logdown.com/posts/2016/09/12/gitlab-ci-runner-register-x509-error, а затем он работал как шарм. Чтобы предотвратить мертвое звено, я копирую следующие шаги:

Сначала отредактируйте конфигурацию ssl на сервере GitLab (а не на бегуне)

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

Скопируйте новый ЦС в бегун GitLab CI

scp /etc/gitlab/ssl/192.168.1.1.crt [email protected]:/etc/gitlab-runner/certs

Спасибо @Moon Light @Wassim Dhif

Ответ 4

В настоящее время нет возможности запуска многопользовательского режима с небезопасным параметром ssl.

В настоящее время в GitLab есть открытая проблема.

Тем не менее вы должны иметь возможность получить свой сертификат, сделать его PEM файл и передать его команде runner с помощью --tls-ca-file

Для создания файла PEM используйте openssl.
openssl x509 -in mycert.crt -out mycert.pem -outform PEM

Ответ 5

В моей настройке работало и следующее. Просто важно, чтобы IP/Name, используемые для создания сертификата, соответствовали IP/Name, используемому для регистрации бегуна.

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

Кроме того, может потребоваться добавить строку для поиска имени хоста для файла config.toml runners (раздел [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-Cert (https://gitlab.com/gitlab-org/gitlab-runner/issues/2659). Грязным обходным путем является добавление environment = ["GIT_SSL_NO_VERIFY=true"] в раздел [[бегуны]].

Ответ 6

Следующие шаги работали в моей среде. (Ubuntu)

Скачать сертификат
У меня не было доступа к серверу gitlab. Следовательно,

  1. Откройте https://some-host-gitlab.com в браузере (я использую Chrome).
  2. Просмотр информации о сайте, как правило, зеленый замок в строке URL.
  3. Скачать/экспортировать сертификат, перейдя к информации о сертификате (chrome, Firefox имеет эту опцию)

В Гитлаб-раннер

  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

Я смог зарегистрировать бегуна в проекте.