Я можу подати проект клонування за допомогою ssh, але він не працює, коли я клоную проект за допомогою https.
Повідомлення про помилку, яке мені показує:
server certificate verification failed. CAfile: /etc/ssl/certs/cacertificates.crt CRLfile: none
Я можу подати проект клонування за допомогою ssh, але він не працює, коли я клоную проект за допомогою https.
Повідомлення про помилку, яке мені показує:
server certificate verification failed. CAfile: /etc/ssl/certs/cacertificates.crt CRLfile: none
Відповіді:
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
Також дивіться мою останню відповідь " Не вдалося підтвердити сертифікат сервера ": вам, можливо, доведеться перевстановити ці сертифікати:
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
which git.
curl-config --ca, але нічого не повернули.
Примітка. Це має великі наслідки для безпеки.
Відкрийте свій термінал і запустіть наступну команду:
export GIT_SSL_NO_VERIFY=1
Це працює для мене, і я використовую систему Linux.
git config --global http.sslverify false
Ще однією причиною цієї проблеми може бути те, що ваш годинник може бути вимкненим. Сертифікати залежать від часу.
Щоб перевірити поточний системний час:
date -R
Ви можете розглянути можливість встановлення NTP для автоматичної синхронізації системного часу з надійними інтернет-таймерами із глобального пулу NTP . Наприклад, для встановлення на Debian / Ubuntu:
apt-get install ntp
gitскажеш, це основний обмін SSL. Git побудований із підтримкою SSL.
Якщо ви використовуєте сервер git всередині приватної мережі та використовуєте сертифікат із власним підписом або сертифікат через IP-адресу; Ви також можете просто скористатися глобальною конфігурацією git, щоб відключити перевірки ssl:
git config --global http.sslverify "false"
Була така ж проблема. Викликаний власноруч виданим сертифікатним органом. Вирішили це, додавши .pem файл в / usr / local / share / ca-сертифікати / та зателефонувавши
sudo update-ca-certificates
PS: pem-файл у папці ./share/ca-certificate ОБОВ'ЯЗКОВО мати розширення .crt
Перевірте свій системний годинник,
$ date
Якщо це неправильно, перевірка сертифіката не вдасться. Щоб виправити системний годинник,
$ apt-get install ntp
Годинник повинен сам синхронізуватися.
Нарешті знову введіть команду клонування.
GIT_CURL_VERBOSE=1 git [clone|fetch]…
повинен сказати вам, де проблема. У моєму випадку це було пов’язано з тим, що CURL не підтримує PEM-сертифікати, коли він побудований проти NSS, через те, що підтримка не є основною лінією в NSS ( # 726116 # 804215 # 402712 і більше ).
GIT_CURL_VERBOSE. Я не згадував це у своїй відповіді. +1
Або просто запустіть цей коментар, щоб додати Сертифікат сервера до вашої бази даних:
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 знову.
Під час налаштування проксі-сервера я зіпсував свої файли CA. Неможливо витягнути дані з github і отримати те саме попередження:
не вдалося підтвердити сертифікат сервера. CAfile: /etc/ssl/certs/ca-certificate.crt CRLfile: немає
скористайтеся методом Vonc, отримайте сертифікат від github та вставте його у /etc/ssl/certs/ca-certificate.crt, проблему вирішено.
ехо -н | openssl s_client -showcerts -connect github.com:243 2> / dev / null | sed -ne '/ -БЕГІНОВИЙ СЕРТИФІКАТ - /, / - КОНТРОЛЬНИЙ СЕРТИФІКАТ / / p'
немає необхідності встановлювати перевірку git ssl на false. Він виникає, коли система не має всіх сертифікатів повноважень CA. Переважно серед людей, у яких справжній сертифікат SSL, відсутній проміжний сертифікат.
Просто додавання повного тексту проміжного сертифіката (цілий ланцюг відсутнього КА та проміжний сертифікат) до
sudo gedit /etc/ssl/certs/ca-certificates.crt
працює без запуску update-ca-certificates.
Те саме стосується і генерованих вручну сертифікатів, просто додайте текст сертифіката CA.
На завершення: Push вдалий: Все актуально
Що я зробив, щоб вирішити цю проблему в терміналі (Ubuntu 18.04):
openssl s_client -showcerts -servername www.github.com -connect www.github.com:443
Я отримав два шматки сертифікату. І я скопіював фрагменти сертифікату в мій файл сертифіката в /etc/ssl/certs/ca-certificates.crt.
---BEGIN CERTIFICATE---і --- END CERTIFICATE ---?
Я встановив Xubuntu на Raspberry pi 2, виявив таку ж проблему з часом, як синхронізація NTP та автоматичного сервера була вимкнена (або не встановлена). Отримайте NTP
sudo apt-get install ntp
і змініть "Час і дата" з "Посібника" на "Продовжуйте синхронізуватися з Інтернет-серверами"
Врешті-решт, додайте 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
git config http.sslVerify false. Ви пропонуєте редагувати конфігурацію Git на основі репозиторію, а не в усьому світі, як це запропонував @ romain-vdk?
Перше, що слід перевірити, це дозвіл на файл /etc/sslта /etc/ssl/certs.
Я допустив помилку, коли викидав дозволи на файли (або здував rm -rf /etc/ssl/*каталоги SSL ) під час використання ssl-certімені / ідентифікатора групи під час роботи над моїм інструментом управління сертифікаційним органом .
Саме тоді я помітив , що точно таке ж повідомлення про помилку для wgetі curlCLI інструментів браузера:
server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none
Як тільки я довів дозвіл на файли /etc/sslта /etc/ssl/certкаталоги o+rx-w, ці інструменти браузера CLI почали дихати трохи легше:
mkdir -p /etc/ssl/certs
chmod u+rwx,go+rx /etc/ssl /etc/ssl/certs
Мені також довелося відтворити підкаталог Java і реконструювати довірені сертифікати довірених сертифікатів CA:
mkdir /etc/ssl/certs/java
chmod u+rwx,go+rx /etc/ssl/certs/java
update-ca-certificates
і узбережжя було ясним.
Я щойно стикався з тією самою проблемою з git сховища, яке завжди працює для мене. Проблема полягала в тому, що я отримав доступ до нього через загальнодоступний Wi-Fi доступ, який перенаправляє на захоплений портал при першому підключенні (наприклад, щоб показувати рекламу та погоджуватися з тонами).
curl-config --caповернувся/etc/ssl/certs/ca-certificates.crt, саме там мені довелося додати сертифікат. Окрім цього, ця відповідь була першою інформацією, яка вказує на мене у правильному напрямку із цим питанням