TLDR:
hostname=XXX
port=443
trust_cert_file_location=`curl-config --ca`
sudo bash -c "echo -n | openssl s_client -showcerts -connect $hostname:$port -servername $hostname \
2>/dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' \
>> $trust_cert_file_location"
Длинный ответ
Основная причина в том, что ваш компьютер не доверяет центру сертификации, который подписал сертификат, используемый на сервере Gitlab . Это не означает, что сертификат является подозрительным, но он может быть самоподписанным или подписанным организацией / компанией, которой нет в списке центров сертификации вашей ОС. Чтобы обойти проблему на вашем компьютере, вы должны заставить его доверять этому сертификату, если у вас нет причин для подозрения.
Вам необходимо проверить веб-сертификат, используемый для вашего сервера gitLab, и добавить его к своему </git_installation_folder>/bin/curl-ca-bundle.crt
.
Чтобы проверить, работает ли хотя бы клон без проверки указанного сертификата, вы можете установить:
export GIT_SSL_NO_VERIFY=1
#or
git config --global http.sslverify false
Но это будет только для тестирования, как показано в « SSL работает с браузером, wget и curl, но не работает с git » или в этом сообщении в блоге .
Проверьте настройки GitLab, выпуск 4272 .
Чтобы получить этот сертификат (который вам нужно добавить в ваш curl-ca-bundle.crt
файл), введите:
echo -n | openssl s_client -showcerts -connect yourserver.com:YourHttpsGitlabPort \
2>/dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'
(где ' yourserver.com
' - это имя вашего сервера GitLab и YourHttpsGitlabPort
обычно порт https 443
)
Чтобы проверить CA (эмитент центра сертификации), введите:
echo -n | openssl s_client -showcerts -connect yourserver.com:YourHttpsGilabPort \
2>/dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' \
| openssl x509 -noout -text | grep "CA Issuers" | head -1
Примечание: Валерий Катков предлагает в комментариях добавить -servername
опцию к команде openssl, в противном случае команда не показывает сертификат для www.github.com в случае Валерия.
openssl s_client -showcerts -servername www.github.com -connect www.github.com:443
Финдекано добавляет в комментариях :
чтобы определить местоположение curl-ca-bundle.crt
, вы можете использовать команду
curl-config --ca
Кроме того, посмотрите мой более свежий ответ « github: сбой проверки сертификата сервера »: возможно, вам придется перерегистрировать эти сертификаты:
sudo apt-get install --reinstall ca-certificates
sudo mkdir /usr/local/share/ca-certificates/cacert.org
sudo wget -P /usr/local/share/ca-certificates/cacert.org http://www.cacert.org/certs/root.crt http://www.cacert.org/certs/class3.crt
sudo update-ca-certificates
git config --global http.sslCAinfo /etc/ssl/certs/ca-certificates.crt
curl-config --ca
вернулось/etc/ssl/certs/ca-certificates.crt
, куда я должен был добавить сертификат. Кроме того, этот ответ был первой информацией, указывающей мне правильное направление в этом вопросе