GitLab Running - Невозможно доверять самозаверяющему сертификату

При запуске GitLab CI Runner я должен указать

environment = ["GIT_SSL_NO_VERIFY=true"]"

Без этого я получаю следующую ошибку от GitLab CI

Cloning into 'D:/GitRunner/builds/c2RN8y5j/0/joeybob/mytestproect'...
fatal: unable to access 'https://gitlab-ci-token:xxxxxxxxxxxxxxxxxxxx@myserver.local/joeybob/mytestproect.git/': error setting certificate verify locations:
  CAfile: D:\GitRunner\builds\c2RN8y5j\0\joeybob\mytestproect.tmp\CI_SERVER_TLS_CA_FILE
  CApath: none

Проверяя содержимое CI_SERVER_TLS_CA_FILE, я вижу, что оно соответствует ожидаемым значениям между BEGIN CERTIFICATE и END CERTIFICATE.

Когда я включаю GIT_SSL_NO_VERIFY = true, окно CI выдает следующую ошибку, но все еще успешно

WARNING: Failed to load system CertPool: crypto/x509: system root pool is not available on Windows 
ERROR: Failed to parse PEM in D:\GitRunner\builds\c2RN8y5j\0\joeybob\mytestproect.tmp\CI_SERVER_TLS_CA_FILE 

Я предполагаю, что что-то не так с файлом PEM (crt). Я запускаю это на Windows Server 2016 и экспортировал сертификат из моего локального хранилища доверенных корневых сертификатов в формате X.509 в кодировке base-64. Может ли эта проблема быть связана с тем, как Windows кодирует файл?

2 ответа

CI_SERVER_TLS_CA_FILEна самом деле это обходной путь от gitlab (самозаверяющий сертификат для), вы можете удалить его, потому что ваш внутренний компьютер (докер-контейнер) CA может обрабатыватьgitlab.comбез обходных путей.

      http.https://gitlab.com.sslcainfo=/home/gitlab-runner/builds/EBo-xXLj/0/user/project.tmp/CI_SERVER_TLS_CA_FILE
      #!/usr/bin/env bash
set -e

# It will remove CI_SERVER_TLS_CA_FILE.
git config --unset http.https://gitlab.com.sslCAInfo || :

# I can fetch something
git fetch

# I can commit and push something
git add . && git commit -m "update" && git push

Джоуи, это, вероятно, может быть слишком поздно и бесполезно для тебя, но, может быть, это также поможет тебе. У меня была такая же проблема, и я решил ее следующим образом:

Я предполагаю, что вы уже сделали это:

  1. Зарегистрируйте бегуна, передав ему сертификат с аргументом gitlab-runner register --tls-ca-file=/path (сертификат должен быть в формате.pem)
  2. Установлен environment = ["GIT_SSL_NO_VERIFY=true"]".
  3. Импортируйте сертификат как доверенный корневой сертификат в Windows.

А теперь самое интересное:

3. Несколько раз скопируйте содержимое сертификата в файл.pem.

Я имею в виду, что вы просто открываете файл.pem, копируете содержимое и вставляете его несколько раз в один и тот же файл. Сохраните его и позвольте конвейеру снова запустить. Вы больше не должны видеть никаких ошибок.

Проблема в том, что виновато содержимое. Проблема в том, что UTF-8 имеет спецификацию, поскольку содержимое преобразуется из байта в строку.

Многократное добавление сертификатов в файл должно избавить вас от ошибки в Runner. Это скорее обходной путь, чем решение, но делается быстро и по крайней мере.

Подробнее об этом: https://gitlab.com/gitlab-org/gitlab-runner/issues/4814

и: https://gitlab.com/gitlab-org/gitlab-runner/issues/2173

Надеюсь, это поможет!

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