Проверка сертификата сервера не удалась. CAfile:/etc/ssl/certs/ca-certificates.crt CRLfile: none

Я могу выдвинуть клонированный проект с помощью ssh, но он не работает, когда я клонирую проект с помощью https.

Сообщение об ошибке, которое показывает мне:

server certificate verification failed. CAfile: /etc/ssl/certs/cacertificates.crt CRLfile: none

Ответ 1

TL;DR:

hostname=XXX
port=443
trust_cert_file_location='curl-config --ca'

sudo bash -c "echo -n | openssl s_client -showcerts -connect $hostname:$port \
    2>/dev/null  | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'  \
    >> $trust_cert_file_location"

Длинный ответ

Основная причина в том, что ваш компьютер не доверяет центру сертификации, который подписал сертификат, используемый на сервере Gitlab. Это не означает, что сертификат является подозрительным, но он может быть самозаверяющим или подписанным организацией/компанией, которой нет в списке CA ваших ОС. Чтобы обойти проблему на вашем компьютере, вы должны заставить его доверять этому сертификату, если у вас нет причин для подозрения.

Вам необходимо проверить веб-сертификат, используемый для вашего сервера 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:YourHttpGilabPort \
  2>/dev/null  | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'

(имя сервера yourserver.com - yourserver.com)

Чтобы проверить CA (эмитент центра сертификации), введите:

echo -n | openssl s_client -showcerts -connect yourserver.com:YourHttpGilabPort \
  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

Ответ 2

Примечание. У этого параметра есть основные последствия для безопасности.

Откройте терминал и выполните следующую команду:

export GIT_SSL_NO_VERIFY=1

Он работает для меня, и я использую систему Linux.

Ответ 3

Другой причиной этой проблемы может быть то, что ваши часы могут быть выключены. Сертификаты чувствительны к времени.

Чтобы проверить текущее системное время:

date -R

Возможно, вы захотите установить NTP для автоматической синхронизации системного времени с надежными интернет-таймерами из глобальный пул NTP. Например, чтобы установить на Debian/Ubuntu:

apt-get install ntp

Ответ 4

Если вы используете сервер git внутри частной сети и используете самозаверяющий сертификат или сертификат по IP-адресу; вы также можете просто использовать глобальную конфигурацию git для отключения проверки ssl:

git config --global http.sslverify "false"

Ответ 5

Была такая же проблема. Вызывается саморегулируемым центром сертификации. Выбрал его, добавив файл .pem в /usr/local/share/ca-certificates/ и вызов

sudo update-ca-certificates

PS: файл pem в папке. /share/ca -certificates ДОЛЖЕН иметь расширение .crt

Ответ 6

Проверьте системные часы,

$ date

Если это неверно, проверка сертификата завершится неудачно. Чтобы исправить системные часы,

$ apt-get install ntp

Часы должны синхронизировать себя.

Наконец, введите команду clone снова.

Ответ 7

GIT_CURL_VERBOSE=1 git [clone|fetch]…

должен сообщить вам, где проблема. В моем случае это было связано с тем, что cURL не поддерживает сертификаты PEM при построении на NSS, из-за того, что эта поддержка не является основной в NSS (# 726116 # 804215 # 402712 и более).

Ответ 8

Или просто запустите этот комментарий, чтобы добавить сертификат сервера в свою базу данных:

echo $(echo -n | openssl s_client -showcerts -connect yourserver.com:YourHttpGilabPort 2>/dev/null  | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p') >> /etc/ssl/certs/ca-certificates.crt

Затем снова выполните git клон.

Ответ 9

Я перепутал свои файлы CA, пока я настраивал прокси-сервер goagent. Невозможно извлечь данные из github и получить такое же предупреждение:

Ошибка сертификата сервера. CAfile:/etc/ssl/certs/ca-certificates.crt CRLfile: none

используйте метод Vonc, получите сертификат от github и поместите его в /etc/ssl/certs/ca -certificates.crt, проблема решена.

echo -n | openssl s_client -showcerts -connect github.com:443 2 > /dev/null | sed -ne '/-BEGIN CERTIFICATE -/,/- END CERTIFICATE-/p'

Ответ 10

нет необходимости устанавливать проверку git ssl для установки на false. Это вызвано тем, что система не имеет всех сертификатов CA. В основном люди, имеющие подлинный сертификат SSL, пропускают промежуточный сертификат.

Просто добавьте полный текст промежуточного сертификата (целую цепочку отсутствующего CA и промежуточного сертификата) в

sudo gedit /etc/ssl/certs/ca-certificates.crt 

работает без запуска update-ca-certificates.

То же самое касается сертификатов, созданных вручную, просто добавьте текст сертификата CA.

В конце: нажмите "Успешно": все обновлено

Ответ 11

Я установил Xubuntu на Raspberry pi 2, нашел ту же проблему со временем, поскольку NTP и автоматическая синхронизация сервера были отключены (или не установлены). Получить NTP

sudo apt-get install ntp

и измените "Время и дата" в "Ручном" на "Продолжить синхронизацию с интернет-серверами"

Ответ 12

Что я сделал, чтобы решить эту проблему в терминале (Ubuntu 18.04):

openssl s_client -showcerts -servername www.github.com -connect www.github.com:443

Я получил два куска сертификата. И я скопировал фрагменты сертификата в мой файл сертификата в /etc/ssl/certs/ca-certificates.crt.

Ответ 13

В конце концов, добавьте http.sslverify в ваш .git/config.

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    url = https://server/user/project.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[http]
        sslVerify = false

Ответ 14

Я столкнулся с той же самой проблемой с репозиторием git, который всегда работает для меня. Проблема заключалась в том, что я обратился к нему через общедоступный WiFi-доступ, который перенаправляет на невольный портал по первому соединению (например, чтобы показывать рекламу и соглашаться с сообщениями).

Ответ 15

Убедитесь, что ваш сервер подключен к Интернету.

Ответ 16

Скопируйте сертификат и пакет в один файл .crt и убедитесь, что между сертификатами в файле есть пустая строка.

Это сработало для меня на сервере GitLab после того, как я попробовал все в Интернете.