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. Следовательно,
- Откройте https://some-host-gitlab.com/ в браузере (я использую Chrome).
- Просмотр информации о сайте, как правило, зеленый замок в строке URL.
- Загрузите / экспортируйте сертификат, перейдя к информации о сертификате (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
Я смог зарегистрировать бегуна в проекте.
В настоящее время нет возможности запустить многопользовательский режим с небезопасной опцией 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, как было предложено в ответе выше.
И всё, после этого я смог зарегистрировать своего бегуна.