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
Джоуи, это, вероятно, может быть слишком поздно и бесполезно для тебя, но, может быть, это также поможет тебе. У меня была такая же проблема, и я решил ее следующим образом:
Я предполагаю, что вы уже сделали это:
- Зарегистрируйте бегуна, передав ему сертификат с аргументом
gitlab-runner register --tls-ca-file=/path
(сертификат должен быть в формате.pem) - Установлен
environment = ["GIT_SSL_NO_VERIFY=true"]"
. - Импортируйте сертификат как доверенный корневой сертификат в 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
Надеюсь, это поможет!