Сертификат SSL отклонен при попытке доступа к GitHub через HTTPS через брандмауэр - PullRequest
373 голосов
/ 23 сентября 2010

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

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

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

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

* О программеconnect () к порту 443 github.com (# 0)
* Попытка 207.97.227.239 ... * успешно установить местоположения проверки сертификата:
* CAfile: нет
CApath: / usr / ssl / certs
* Проблема с сертификатом SSL, убедитесь, что сертификат CA в порядке.Сведения:
ошибка: 14090086: подпрограммы SSL: SSL3_GET_SERVER_CERTIFICATE: сбой проверки сертификата
* Истекает очистка
* Закрытие соединения # 0
* О подключении () к порту 443 github.com (# 0)
* Попытка 207.97.227.239 ... * успешно установить местоположения проверки сертификата:
* CAfile: нет
CApath: / usr / ssl / certs
* Проблема с сертификатом SSL, убедитесь, что сертификат CAХОРОШО.Сведения:
ошибка: 14090086: подпрограммы SSL: SSL3_GET_SERVER_CERTIFICATE: сбой проверки сертификата
* Истечение срока действия очищено
* Закрытие соединения # 0
ошибка: проблема с сертификатом SSL, убедитесь, что сертификат ЦС в порядке.Сведения:
ошибка: 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, я в замешательстве.

Ответы [ 29 ]

514 голосов
/ 15 декабря 2010

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

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

Существует два решения:

  1. Фактически установите корневые сертификаты. Ребята из Curl извлекли для вас сертификаты из 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...
    
420 голосов
/ 06 января 2012

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

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

git config --global http.sslVerify false

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

Только для одного хранилища:

git config http.sslVerify false
109 голосов
/ 12 декабря 2011

Я хотел, чтобы 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:».

56 голосов
/ 23 сентября 2010

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

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

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

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

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

Прокси-хост и проксипорт - это координаты прокси-сервера 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

теперь вы можете проверить его работоспособность, подключившись к 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:~$
* 1023.* (Примечание: если вы никогда ранее не входили в 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.

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

41 голосов
/ 18 августа 2011

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

export GIT_SSL_NO_VERIFY=true

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

40 голосов
/ 12 ноября 2013

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

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

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

31 голосов
/ 24 августа 2012

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

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

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

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

16 голосов
/ 29 ноября 2011

Мне известны оригинальные списки вопросов 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/

14 голосов
/ 06 ноября 2012

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

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

14 голосов
/ 31 октября 2016

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...