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 дает мне

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

fatal: HTTP request failed

это проблема с моим брандмауэром, cygwin или что?

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

28 ответов


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

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

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

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

$ 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 попросит добавить ключ сервера в известный файл hosts. Если вы параноик, рекомендуется проверить 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, Macs и Windows.

если вы хотите, вы можете подробнее об этом читайте в этом блоге


проблема в том, что в вашей системе не установлены сертификаты Центра сертификации. И эти сертификаты не могут быть установлены с настройкой cygwin.исполняемый.

обновление: установите пакет Net / ca-certificates в cygwin (спасибо dirkjot)

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

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

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

    вот как это сделать. С настройкой cygwin.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 имеет последствия для безопасности. Это позволяет человеку в середине атак, когда вы используете Git для передачи данных по сети. Убедитесь, что вы полностью понимаете последствия для безопасности, прежде чем использовать это в качестве решения. Или еще лучше, установите корневые сертификаты.

один из способов-отключить проверку сертификата SSL:

git config --global http.sslVerify false

это предотвратит скручиваемость к верности сертификации 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_CURL_VERBOSE=1. Путь к файлу CA, который использует Git, будет показан на строках, начинающихся с "CAfile:" в выходных данных.


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

export GIT_SSL_NO_VERIFY=true

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


очень простое решение: заменить на HTTPS:// с помощью Git://

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

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


как самый популярный ответ (Алексей Vishentsev) есть это:

проблема в том, что у вас нет ни центра сертификации сертификаты, установленные в вашей системе. И эти сертификаты не могут быть установки с установки по Cygwin.исполняемый.

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

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


Я знаю исходные списки вопросов 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.х, простой yum update openssl обновлен пакет openssl, который обновил систему и исправлена проблема для меня.

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


для клонирования в windows при установке SSL verify в false:

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

Если вы хотите клонировать без borfing ваши глобальные настройки.


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

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

если вы находитесь на 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 так как это РЕПО git. Просто сделайте то, что говорит 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 ca-bundle.

обновление:

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

обновление

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

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

обновление

похоже curl-ca-bundle был недавно удалены из homebrew. Есть рекомендация.

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

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


я исправил эту проблему, используя АПТ-системы Cyg (многие установщика подобно apt-получите) легко скачать ca-сертификаты (включая Git и многие другие):

apt-cyg install ca-certificates

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

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

на rasbery pi у меня был

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

Итак, id a

sudo apt-get install ca-certificates

затем

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

работала


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

apt-get install ca-сертификаты


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

вы можете проверить, что все работает с помощью openssl в командной строке:

openssl s_client -connect github.com:443

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

machine github.com login myusername password mypass

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

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


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

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

хорошо, что это решение вступает в силу только в текущем окне cmd.


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

Я абсолютно отказался сделать мои операции 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 на платформе совместной разработки, которой я должен управлять.

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

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

  • вернуться сертификата органа, поставляет сертификат для сервера.

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

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

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

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


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

%systemroot%\system32\drivers\etc\hosts


Я просто отключил аутентификацию SSL-сертификата и использовал простой пароль имени пользователя, как показано нижеenter image description here


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


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

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

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

    GIT_SSL_CAINFO=в/usr/протокол SSL/сертификаты/ка-пакет.crt GIT_CURL_VERBOSE=1 git ...

    (подробный вариант не требуется)

    или сохранение опции постоянно:

    git config --глобальный http.sslCAinfo в /usr/протокол SSL/сертификаты/ка-пакет.crt

    git ...


У меня была та же проблема. Импорт сертификата или команда для отмены проверки 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 года (несколькими днями ранее). Удаление истекшего сертификата решило проблему для меня.

надеюсь, что это помогает.


для тех, кто использует Msys/MinGW GIT, добавьте это

  export GIT_SSL_CAINFO=/mingw32/ssl/certs/ca-bundle.crt