Gitlab-CI runner: игнорировать самоподписанный сертификат

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.

7 ответов

Решение

Хорошо, я следовал шаг за шагом этот пост 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

Скопируйте новый 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 о самозаверяющих и подписанных 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 #2675

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

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

Следующие шаги работали в моей среде. (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

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

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

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

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

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

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

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

Я столкнулся с той же проблемой: в моем случае мне пришлось создать SSL-сертификат SAN с помощью следующих команд (замените переменные на вашу конкретную среду) :

      openssl genrsa -out ca.key 2048

openssl req -new -x509 -days 365 -key ca.key -subj "/C=__country__/ST=__state_or_province__/L=__locality__/O=__organisation(s)__/CN=__common_name__" -out ca.crt

openssl req -newkey rsa:2048 -nodes -keyout __domain_name__.key -subj "/C=__country__/ST=__state_or_province__/L=__locality__/O=__organisation(s)__/CN=__common_name__" -out __domain_name__.csr

openssl x509 -req -extfile <(printf "subjectAltName=DNS:__domain_name_could__use_wildcard__") -days 365 -in __domain_name__.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out __domain_name__.crt

Шпаргалка по свойствам идентификатора сертификата: https://www.ibm.com/docs/en/ibm-mq/7.5?topic=certificates-distinguished-names

Возможно, вам придется изменить некоторые конфигурации в /etc/gitlab/gitlab.rb.

      nginx['ssl_client_certificate'] = "/etc/gitlab/ssl/ca.crt"
nginx['ssl_certificate'] = "/etc/gitlab/ssl/__domain_name__.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/__domain_name__.key"

Подумайте о том, чтобы после этого перенастроить и перезапустить сервер gitlab.

      gitlab-ctl reconfigure
gitlab-ctl restart

Вы можете проверить, правильно ли обновлен ваш сертификат, с помощью следующей команды

      openssl s_client -connect __domain_name__:443 </dev/null 2>/dev/null | openssl x509 -noout -text | grep DNS:

На выходе должно быть «DNS: имя_домена » .

Затем я просто перенес файл имя_домена .crt, сгенерированный на сервере gitlab, в бегун gitlab в /etc/gitlab_runner/certs, как было предложено в ответе выше.

И всё, после этого я смог зарегистрировать своего бегуна.

Другие вопросы по тегам