Проверка сертификата сервера не удалась. 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 после того, как я попробовал все в Интернете.
Ответ 17
Нужно настроить цепочки сертификатов SSL, http://nginx.org/en/docs/http/configuring_https_servers.html
cat www.example.com.crt bundle.crt> www.example.com.chained.crt