Сертификат SSL отклонен при попытке доступа к GitHub через HTTPS через брандмауэр

Я застрял за брандмауэром, поэтому мне нужно использовать HTTPS для доступа к моему репозиторию GitHub. Я использую Cygwin 1.7.7 на Windows XP.

Я пытался установить пульт на https://username@github.com/username/ExcelANT.git, но нажимает подсказки для пароля, но ничего не делает, как только я ввел его.https://username:<password>github.com/username/ExcelANT.git и клонирование пустого репо с нуля, но каждый раз это дает мне ту же ошибку

ошибка: проблема с сертификатом SSL, проверьте, что сертификат CA в порядке. Подробности:
ошибка:14090086: подпрограммы SSL:SSL3_GET_SERVER_CERTIFICATE: сбой проверки сертификата при доступе к https://github.com/username/ExcelANT.git/info/refs

Включение GIT_CURL_VERBOSE=1 дает мне

* О подключении () к порту 443 github.com (# 0)
* Попытка 207.97.227.239... * Успешно установить местоположение проверки сертификата:
* CAfile: нет
CApath: / usr / ssl / certs
* Проблема с сертификатом SSL, убедитесь, что сертификат CA в порядке. Подробности:
ошибка:14090086: подпрограммы SSL:SSL3_GET_SERVER_CERTIFICATE: сбой проверки сертификата
* Expire очищается
* Закрытие соединения № 0
* О подключении () к порту 443 github.com (# 0)
* Попытка 207.97.227.239... * Успешно установить местоположение проверки сертификата:
* CAfile: нет
CApath: / usr / ssl / certs
* Проблема с сертификатом SSL, убедитесь, что сертификат CA в порядке. Подробности:
ошибка:14090086: подпрограммы SSL:SSL3_GET_SERVER_CERTIFICATE: сбой проверки сертификата
* Expire очищается
* Закрытие соединения № 0
ошибка: проблема с сертификатом SSL, проверьте, что сертификат CA в порядке. Подробности:
ошибка:14090086: подпрограммы SSL:SSL3_GET_SERVER_CERTIFICATE: сбой проверки сертификата при доступе к https://github.com/username/ExcelANT.git/info/refs

fatal: HTTP request failed

Это проблема моего брандмауэра, Cygwin или как?

Я не установил HTTP-прокси в конфигурации Git, однако это ISA-сервер, который требует проверки подлинности NTLM, а не базовой, поэтому, если кто-то не знает, как заставить git использовать NTLM, я расстроен.

31 ответ

Решение

Не стесняйтесь пропустить этот ответ, если хотите исправить проблему с сертификатами. Этот ответ касается туннелирования ssh через брандмауэр, который, на мой взгляд, является лучшим решением для работы с вещами брандмауэра / прокси.

Существует лучший способ, чем использование доступа по протоколу http, а именно использование службы ssh, предлагаемой github на порту 443 сервера ssh.github.com.

Мы используем инструмент под названием штопор. Это доступно как для CygWin (через настройку с домашней страницы cygwin), так и для Linux с использованием вашего любимого инструмента упаковки. Для MacOSX это доступно от macports и варится по крайней мере.

Командная строка выглядит следующим образом:

$ corkscrew <proxyhost> <proxyport> <targethost> <targetport> <authfile>

Proxyhost и proxyport являются координатами прокси https. Targethost и targetport - это местоположение хоста для туннелирования. Authfile - это текстовый файл с 1 строкой, содержащей имя пользователя и пароль прокси-сервера, разделенные двоеточием.

например:

abc:very_secret

Установка для использования "нормального" протокола ssh для git-коммуникации

Добавив это к ~/.ssh/config этот прием можно использовать для обычных соединений ssh.

Host github.com
  HostName ssh.github.com
  Port 443
  User git
  ProxyCommand corkscrew <proxyhost> <proxyport> %h %p ~/.ssh/proxy_auth

теперь вы можете проверить его работоспособность, используя ssh-ing для gitproxy

pti@pti-laptop:~$ ssh github.com
PTY allocation request failed on channel 0
Hi ptillemans! You've successfully authenticated, but GitHub does not provide shell access.
       Connection to github.com closed.
pti@pti-laptop:~$

(Примечание: если вы никогда ранее не входили в github, ssh попросит добавить ключ сервера в файл известных хостов. Если вы параноик, рекомендуется проверить отпечаток RSA на тот, который указан на сайте github, где вы загрузил ваш ключ).

Небольшой вариант этого метода - случай, когда вам нужно получить доступ к хранилищу с другим ключом, например, чтобы отделить вашу личную учетную запись от вашей профессиональной учетной записи.

# 
# account dedicated for the ACME private github account 
#
Host acme.github.com
  User git
  HostName ssh.github.com
  Port 443
  ProxyCommand corkscrew <proxyhost> <3128> %h %p ~/.ssh/proxy_auth
  IdentityFile ~/.ssh/id_dsa_acme

наслаждаться!

Мы использовали это в течение многих лет на Linux, Mac и Windows.

Если вы хотите, вы можете прочитать больше об этом в этом блоге

Проблема в том, что в вашей системе не установлены какие-либо сертификаты удостоверяющего центра. И эти сертификаты не могут быть установлены с помощью setup.exe cygwin.

Обновление: установите пакет Net/ CA-Certificates в cygwin (спасибо, dirkjot)

Есть два решения:

  1. Собственно установите корневые сертификаты. Керл, ребята, извлекли для вас сертификаты от Mozilla.

    cacert.pem Файл - это то, что вы ищете. Этот файл содержит> 250 сертификатов CA (не знаю, как доверять этому количеству госзакупок). Вам нужно скачать этот файл, разделить его на отдельные сертификаты, поместить их в /usr/ssl/certs (ваш CApath) и проиндексировать их.

    Вот как это сделать. С помощью cygwin setup.exe установите пакеты curl и openssl:

    $ cd /usr/ssl/certs
    $ curl http://curl.haxx.se/ca/cacert.pem |
      awk '{print > "cert" (1+n) ".pem"} /-----END CERTIFICATE-----/ {n++}'
    $ c_rehash
    

    Важно: чтобы использовать c_rehash Вы должны установить openssl-perl тоже.

  2. Игнорировать проверку сертификата SSL.

    ВНИМАНИЕ: Отключение проверки SSL-сертификата имеет последствия для безопасности. Без проверки подлинности соединений SSL/HTTPS злоумышленник может выдать себя за доверенную конечную точку (например, GitHub или какой-либо другой удаленный хост Git), и вы будете уязвимы для атаки типа "человек посередине". Убедитесь, что вы полностью понимаете проблемы безопасности и свою модель угроз, прежде чем использовать это в качестве решения.

    $ env GIT_SSL_NO_VERIFY=true git clone https://github...
    

Примечание. Отключение проверки SSL имеет последствия для безопасности. Это позволяет Man in Middle атаковать, когда вы используете Git для передачи данных по сети. Убедитесь, что вы полностью понимаете последствия для безопасности, прежде чем использовать это в качестве решения. Или еще лучше, установите корневые сертификаты.

Одним из способов является отключение проверки SSL CERT:

git config --global http.sslVerify false

Это не позволит CURL подтвердить подлинность HTTPS.

Только для одного репозитория:

git config http.sslVerify false

Я хотел, чтобы Git использовал обновленный пакет сертификатов, не заменяя тот, который использует вся моя система. Вот как Git использует определенный файл в моем домашнем каталоге:

mkdir ~/certs
curl http://curl.haxx.se/ca/cacert.pem -o ~/certs/cacert.pem

Теперь обновите .gitconfig использовать это для проверки сверстников:

[http]
sslCAinfo = /home/radium/certs/cacert.pem

Обратите внимание, я использую абсолютный путь. Git здесь не расширяет путь, поэтому вы не можете использовать ~ без безобразного клуджа. Кроме того, вы можете пропустить файл конфигурации и установить путь с помощью переменной среды GIT_SSL_CAINFO вместо.

Чтобы устранить это, установите GIT_CURL_VERBOSE=1, Путь к файлу CA, который использует Git, будет показан в строках, начинающихся с "CAfile:" в выходных данных.

Обратите внимание, что для того, чтобы это заработало (установка RVM на CentOS 5.6), мне нужно было выполнить следующее:

export GIT_SSL_NO_VERIFY=true

и после этого стандартная процедура установки для скручивания установщика RVM в bash сработала:)

Очень простое решение: замените https:// на git://

Используйте git://the.repository вместо https://the.repository/ и будет работать.

У меня была эта проблема на Windows с TortoiseGit, и это решило ее.

Самый популярный ответ (Алексей Вишенцев) таков:

Проблема в том, что в вашей системе не установлены какие-либо сертификаты удостоверяющего центра. И эти сертификаты не могут быть установлены с помощью setup.exe cygwin.

Однако последнее утверждение неверно (сейчас или всегда так было, я не знаю).

Все, что вам нужно сделать, это перейти к настройке Cygwin и включить пакет 'ca-сертификаты' (он находится в сети). Это помогло мне.

Чтобы клонировать Windows при настройке SSL, проверьте значение false:

    git -c http.sslVerify=false clone http://example.com/e.git

Если вы хотите клонировать, не нарушая ваших глобальных настроек.

Я знаю оригинальные списки вопросов Cygwin, но вот решение для CentOS:

curl http://curl.haxx.se/ca/cacert.pem -o /etc/pki/tls/certs/ca-bundle.crt

Источник: http://eric.lubow.org/2011/security/fixing-centos-root-certificate-authority-issues/

На CentOS 5.x, простой yum update openssl обновил пакет openssl, который обновил систему ca-bundle.crt файл и исправил проблему для меня.

То же самое может быть верно для других дистрибутивов.

Если все, что вы хотите сделать, это просто использовать git-клиент Cygwin с github.com, то есть гораздо более простой способ без необходимости загружать, извлекать, преобразовывать, разбивать файлы сертификатов. Действуйте следующим образом (я предполагаю, что Windows XP с Cygwin и Firefox)

  1. В Firefox перейдите на страницу github (любую)
  2. нажмите на значок GitHub в адресной строке, чтобы отобразить сертификат
  3. Нажмите "дополнительная информация" -> "показать сертификат" -> "детали" и выберите каждый узел в иерархии, начиная с самого верхнего; для каждого из них нажмите "Экспорт" и выберите формат PEM:
    • GTECyberTrustGlobalRoot.pem
    • DigiCertHighAssuranceEVRootCA.pem
    • DigiCertHighAssuranceEVCA-1.pem
    • github.com.pem
  4. Сохраните вышеуказанные файлы где-нибудь на локальном диске, измените расширение на.pem и переместите их в /usr/ssl/certs в вашей установке Cygwin (Windows: c: \ cygwin \ ssl \ certs)
  5. (необязательно) Запустите c_reshash из bash.

Вот и все.

Конечно, это устанавливает только одну иерархию сертификатов, ту, которая вам нужна для github. Конечно, вы можете использовать этот метод с любым другим сайтом без необходимости устанавливать 200 сертификатов сайтов, которым вы (не обязательно) доверяете.

Вы можете попробовать эту команду в Терминале:

git config --global http.sslVerify false

Если вы работаете в Mac OS X, вы можете установить ca-cert-bundle через homebrew:

$ brew install curl-ca-bundle
$ git config --system http.sslcainfo /usr/local/share/ca-bundle.crt

Формула устанавливает пакет сертификатов к вашей акции через:

share.install 'ca-bundle.crt'

share Метод просто псевдоним /usr/local/share и curl-ca-bundle предоставляется Mozilla, Это то, на что вы видите ссылки во многих вопросах. Надеюсь, это поможет, поскольку не совсем понятно, как подойти к этому в Mac OS X. brew install curl не принесет вам много, так как это только бочонок и не будет связан (работает which curl всегда будет выводить /usr/bin/curl, который по умолчанию поставляется с вашей ОС). Этот пост также может иметь определенную ценность.

Вам, конечно, нужно будет отключить SSL перед установкой homebrew так как это мерзавец репо. Просто делайте то, что говорит curl, когда он выдает ошибку во время проверки SSL и:

$ echo insecure >> ~/.curlrc

Как только вы получите homebrew установлен вместе с curl-ca-bundle, удалять .curlrc и попробуйте клонировать репо на github. Убедитесь, что ошибок нет, и вам будет хорошо.

ПРИМЕЧАНИЕ: если вы прибегаете к .curlrc пожалуйста, удалите его из вашей системы, как только вы закончите тестирование. Этот файл может вызвать серьезные проблемы, поэтому используйте его во временных целях и с осторожностью. brew doctor будет жаловаться, если вы забудете удалить его из вашей системы).

ПРИМЕЧАНИЕ. Если вы обновите свою версию git, вам нужно будет повторно запустить эту команду, поскольку ваши системные настройки будут удалены (они сохраняются относительно двоичного файла git в зависимости от версии).

Итак, после запуска:

$ brew update
$ brew upgrade

Если вы получили новую версию git, просто перезапустите:

$ git config --system http.sslcainfo /usr/local/share/ca-bundle.crt

И у тебя все будет готово.

Наконец, если у вас есть новая версия git, запустите:

$ git config -l --system

должен дать вам ошибку в соответствии с

fatal: unable to read config file '/usr/local/Cellar/git/1.8.2.2/etc/gitconfig'

это ваш совет, который вы должны сказать git, где находится пакет Mozilla.

ОБНОВИТЬ:

.curlrc может или не может быть решением вашей проблемы. В любом случае, просто установите пакет Mozilla, установленный на вашем компьютере, независимо от того, нужно ли загружать его вручную или нет. Вот что здесь важно. Как только вы получите пакет, вы можете идти. Просто запустите команду git config и укажите git на пакет.

ОБНОВИТЬ

Мне недавно пришлось добавить:

export CURL_CA_BUNDLE=/usr/local/share/ca-bundle.crt к моему .zshenv точечный файл, так как я использую zsh, git config опция работала в большинстве случаев, но при попадании в github по SSL (rvm get stable например), я все еще сталкивался с проблемами сертификата. @Maverick указал на это в своем комментарии, но на случай, если кто-то пропустит это или предположит, что им не обязательно экспортировать эту переменную среды в дополнение к выполнению git config --system.... команда. Спасибо и надеюсь, что это поможет.

ОБНОВИТЬ

Похоже, что curl-ca-bundle был недавно удален из доморощенного. Здесь есть рекомендация.

Вы хотите добавить некоторые файлы в:

$(brew --prefix)/etc/openssl/certs

У меня была такая же проблема для Solaris Express 11. Это заняло у меня некоторое время, но мне удалось найти, где нужно разместить сертификаты. Согласно /etc/openssl/openssl.cnf, путь для сертификатов - / etc / openssl / certs. Я разместил сертификаты, сгенерированные по совету Алексея

Вы можете проверить, что все работает, используя openssl в командной строке:

openssl s_client -connect github.com:443

Я исправил эту проблему, используя apt-cyg (отличный установщик, похожий на apt-get), чтобы легко загружать ca-сертификаты (включая Git и многие другие):

apt-cyg install ca-certificates

Примечание: apt-cyg должен быть сначала установлен. Вы можете сделать это из командной строки Windows:

cd c:\cygwin
setup.exe -q -P wget,tar,qawk,bzip2,subversion,vim

Закройте Windows cmd и откройте Cygwin Bash:

wget rawgit.com/transcode-open/apt-cyg/master/apt-cyg
install apt-cyg /bin

Сгенерируйте токен доступа из Github и сохраните его, так как он больше не появится.

git -c http.sslVerify=false clone https://<username>:<token>@github.com/repo.git

или же,

git config --global http.sslVerify false
git clone https://github.com/repo.git

Если вы использовали ОС на базе Debian, вы можете просто запустить

apt-get установить ca-сертификаты

На разбой пи у меня было

pi@raspbmc:~$ git clone http: //github.com/andreafabrizi/Dropbox-Uploader .git Клонирование в "Dropbox-Uploader"... ошибка: проблема с сертификатом SSL CA (путь? права доступа?) при доступе http:// github.com/andreafabrizi/Dropbox-Uploader.git/info/refs неустранимый: HTTP-запрос не выполнен

так что

sudo apt-get install ca-certificates

затем

git clone http://github.com/andreafabrizi/Dropbox-Uploader.git  

работал

Вы проверили свое время?

Я абсолютно отказался сделать свои операции git небезопасными, и после того, как все люди, упомянутые здесь, попробовали, меня поразило, что одной из возможных причин, по которой сертификаты не проходят проверку, является неправильная дата (либо дата истечения срока действия сертификата, либо локальные часы).

Вы можете легко проверить это, набрав date в терминале. В моем случае (новый Raspberry Pi) местные часы были установлены на 1970, так что просто ntpdate -u 0.ubuntu.pool.ntp.org все исправил. Для rPi я бы также рекомендовал включить следующий скрипт в ежедневную работу cron (скажем, /etc/cron.daily/ntpdate):

#!/bin/sh
/usr/sbin/ntpdate -u 0.ubuntu.pool.ntp.org 1> /dev/null 2>&1

Попробуйте использовать команду

      git config --global http.sslverify false

Эта команда разрешит все сертификаты с http, которые не защищены, но используйте их с осторожностью при использовании в профессиональной среде.

Улучшите решение RouMao, временно отключив проверку GIT/curl ssl в Windows cmd:

set GIT_SSL_NO_VERIFY=true
git config --global http.proxy http://<your-proxy>:443

Преимущество этого решения в том, что оно действует только в текущем окне cmd.

Попробуйте использовать файл.netrc, он будет аутентифицироваться через https. Создать файл вызова .netrc в вашем домашнем каталоге и поместите это в него:

machine github.com login myusername password mypass

Смотрите этот пост для получения дополнительной информации:

https://plus.google.com/u/0/104462765626035447305/posts/WbwD4zcm2fj

Я столкнулся с той же проблемой при настройке Git на платформе совместной разработки, которой я должен управлять.

Чтобы решить это:

  • Я обновил версию Curl, установленную на сервере. Скачайте последнюю версию на сайте Скачайте страницу curl и следите за процедурой установки.

  • Возвратите сертификат органа, который поставляет сертификат для сервера.

  • Добавьте этот сертификат в файл CAcert, используемый curl. На моем сервере он находится в /etc/pki/tls/certs/ca-bundle.crt,

  • Сконфигурируйте git для использования этого файла сертификата, отредактировав файл.gitconfig и установив путь sslcainfo. sslcainfo= /etc/pki/tls/certs/ca-bundle.crt

  • На клиентском компьютере вы должны получить сертификат и настроить файл.gitconfig.

Я надеюсь, что это поможет некоторым из вас.

Я просто отключил аутентификацию с помощью SSL-сертификата и использовал простой логин и пароль, как показано ниже

Я попробовал все, в конце концов я посмотрел в файле hosts и там была случайная запись для github. Удаление псевдонима решило проблему

% SystemRoot%\system32\ Drivers\ Etc\ хостов

Мне нужны были сертификаты только для Cygwin и git, поэтому я сделал то, что написал @esquifit. Однако мне пришлось выполнить шаг 5 вручную, c_rehash не был доступен в моей системе. Я следовал этому руководству: вместо этого устанавливал сертификаты CA в каркас OpenSSL.

Мне нужно было две вещи:

  1. перейдите к настройке cygwin и включите пакетca-Certificates(он находится в сети) (как указано в другом месте).

  2. Скажите git, где найти установленные сертификаты:

    GIT_SSL_CAINFO = / usr / ssl / certs / ca-bundle.crt GIT_CURL_VERBOSE = 1 гит...

    (Подробный вариант не нужен)

    Или сохранить опцию навсегда:

    git config --global http.sslCAinfo /usr/ssl/certs/ca-bundle.crt

    мерзавец...

Я была такая же проблема. Импорт сертификата или команда для отмены проверки SSL не работает. Оказалось, что срок действия пароля для сетевого прокси истек. Был вход в конфиг прокси. в файле.gitconfig присутствует в моем профиле пользователя Windows. Я просто удалил всю запись, и она снова начала работать.

В системе Mac OSX 10.5 я смог заставить это работать простым методом. Во-первых, запустите процедуры github и тест, который работал нормально для меня, показывая, что мой сертификат на самом деле был в порядке. https://help.github.com/articles/generating-ssh-keys

ssh -T git@github.com

Тогда я наконец заметил еще один формат URL для удаленных. Я попробовал другие, выше, и они не работали. http://git-scm.com/book/ch2-5.html

git@github.com:MyGithubUsername/MyRepoName.git

Простой "git push myRemoteName" работал отлично!

У меня недавно (июль 2014 г.) была похожая проблема, и я обнаружил в OS X (10.9.4), что срок действия сертификата "DigiCert High Assurance EV Root CA" истек (хотя у меня был и другой, срок действия которого еще не истек).

  1. Открытый доступ к брелку
  2. Сертификаты поиска для "DigiCert"
  3. Меню "Вид"> Показать просроченные сертификаты

Я нашел два сертификата с именем "DigiCert High Assurance EV Root CA", один из которых истекает ноябрь 2031 года, а другой - в июле 2014 года (несколько дней назад). Удаление просроченного сертификата решило проблему для меня.

Надеюсь это поможет.

Другие вопросы по тегам