Не удалось разрешить "не удалось получить сертификат локального эмитента" с помощью git в Windows с самозаверяющим сертификатом

Я использую git для Windows. Я установил пакет msysgit. У моего тестового репозитория есть собственный сертификат на сервере. Я могу получить доступ к репозиторию и использовать его без проблем. Перемещение на https дает ошибку "Ошибка SSL-сертификата: невозможно получить сертификат локального эмитента".

У меня есть собственный сертификат, установленный в доверенных корневых центрах сертификации моей клиентской машины Windows 7. Я могу просмотреть URL-адрес репозитория https в Internet Explorer без сообщений об ошибках.

В этом блоге http://blogs.msdn.com/b/phkelley/archive/2014/01/20/adding-a-corporate-or-self-signed-certificate-authority-to-git-exe-s-store.aspx объясняется, что завиток не использует хранилище сертификатов клиентского компьютера. Я следил за советом в блоге, чтобы создать приватную копию curl-ca-bundle.crt и настроить git, чтобы использовать его. Я уверен, что git использует мою копию. Если я переименую копию; git жалуется, что файл отсутствует.

Я вставил в свой сертификат, как указано в сообщении в блоге, я все еще получаю сообщение "неспособное получить сертификат локального эмитента".

Я проверил, что git все еще работает, клонируя репозиторий GitHub через https.

Единственное, что я вижу, что отличается от сообщения в блоге, это то, что мой сертификат является корнем - нет цепочки для его достижения. Первоначально мой сертификат был получен при нажатии на ссылку IIS Manager IIS Manager "Создавать подписанный сертификат". Возможно, это делает сертификат чем-то иным, чем то, что ожидает завиток.

Как я могу получить git/curl, чтобы принять самоподписанный сертификат?

Ответ 1

Ответ на этот вопрос Использование makecert для разработки SSL исправил это для меня.

Я не знаю, почему, но сертификат, созданный простой ссылкой "Создать самостоятельный сертификат" в диспетчере IIS, не делает этого. Я следовал подходу в связанном вопросе о создании и установке самозаверяющего CA Root; затем с помощью этого выдать сертификат аутентификации сервера для моего сервера. Я установил их оба в IIS.

Это делает мою ситуацию такой же, как и запись в блоге, на которую ссылается исходный вопрос. После того, как корневой сертификат был скопирован/вставлен в curl-ca-bundle.crt, команда git/curl была удовлетворена.

Ответ 2

Откройте Git Bash и запустите команду, если вы хотите полностью отключить проверку SSL.

git config --global http.sslVerify false

Примечание. Это решение может открыть для вас атаки типа "человек посередине". Поэтому снова включите проверку как можно скорее:

git config --global http.sslVerify true

Ответ 3

У меня тоже была эта проблема. В моем случае я пытался получить post-receive Git hook для обновления рабочей копии на сервере с каждым нажатием. Пытался следовать инструкциям в блоге, с которым вы связались. Не работает и для меня, и переопределение настроек для каждого пользователя тоже не работает.

В результате мне пришлось отключить проверку SSL (как упоминается в статье) для Git в целом. Не идеальное решение, но оно будет работать, пока я не смогу найти лучшего.

Я отредактировал текстовый файл Git config (с моим любимым нейтральным текстом, например, Notepad ++), расположенным по адресу:

C:\Program Files (x86)\ Git\etc\gitconfig

В блоке [http] я добавил параметр для отключения sslVerify. Это было так, когда я закончил:

[http]
    sslVerify = false
    sslCAinfo = /bin/curl-ca-bundle.crt

Это трюк.

ПРИМЕЧАНИЕ.. Это отключает проверку SSL и не рекомендуется в качестве долгосрочного решения.

Ответ 4

Проблема в том, что git по умолчанию использует крипто-бэкэнд "Linux".

Начиная с Git для Windows 2.14, теперь вы можете настроить Git для использования SChannel, встроенного сетевого уровня Windows в качестве крипто-бэкэнда. Это означает, что вы будете использовать механизм хранения сертификатов Windows, и вам не нужно явно настраивать механизм хранения curl CA: https://msdn.microsoft.com/en-us/library/windows/desktop/aa380123(v=vs.85).aspx

Просто выполните:

git config --global http.sslbackend schannel

Это должно помочь.

Использование schannel в настоящее время является стандартной установкой при установке git для windows, также рекомендуется по возможности не извлекать хранилища по SSH, поскольку https проще в настройке и с меньшей вероятностью блокируется брандмауэром, что означает меньшую вероятность сбоя.

Ответ 5

kiddailey Я думаю, что это было довольно близко, однако я бы не отключил проверку ssl, а скорее предоставил локальный сертификат:

В конфигурационном файле Git

[http]
    sslCAinfo = /bin/curl-ca-bundle.crt

Или через командную строку:

git config --global http.sslCAinfo /bin/curl-ca-bundle.crt

Ответ 6

Я тоже столкнулся с этой проблемой. И, наконец, решена, получив руководство из этого блога MSDN.

Обновление

На самом деле вам нужно добавить сертификат в файл сертификатов git curl-ca-bundel.cert, который находится в каталоге Git\bin.

шаги

  1. Откройте свою страницу github в браузере и нажмите на значок блокировки в адресной строке.
  2. В открывшемся всплывающем окне перейдите по ссылке "просмотреть сертификат", откроется всплывающее окно.
  3. В котором перейдите на вкладку сертификаты (3-й в моем случае). Выберите верхний узел, который является корневым сертификатом. И нажмите кнопку копирования сертификата внизу и сохраните файл.
  4. В проводнике перейдите в каталог Git\bin и откройте curl-ca-bundle.crt в текстовом редакторе.
  5. Откройте экспортированный файл сертификата (на шаге 3) и в текстовом редакторе.
  6. Скопируйте весь контент из экспортированного сертификата в конец curl-ca-bundle.crt и сохраните.

Наконец, проверьте статус. Обратите внимание, что перед редактированием сделайте резервную копию файла curl-ca-bundle.crt, чтобы сохранить его в безопасности.

Ответ 7

Чтобы полностью не отключать проверку ssl или дублировать/взламывать связанный файл сертификата CA, используемый git, вы можете экспортировать цепочку сертификатов хоста в файл и использовать git:

git config --global http.https://the.host.com/.sslCAInfo c:/users/me/the.host.com.cer

Если это не сработает, вы можете отключить проверку ssl только для хоста:

git config --global http.https://the.host.com/.sslVerify false

Примечание. При условии, что проверка ssl выключена, подлежит возможному человеку в середине атаки.

Ответ 8

У меня была одна и та же проблема, но с использованием sourcetree на Windows. Аналогичные шаги для обычного GIT в Windows. Следуя следующим шагам, я смог решить эту проблему.

  • Получить дерево сертификатов сервера Это можно сделать, используя хром. Укажите адрес сервера. Нажмите на значок замка и просмотрите сертификаты. Экспортируйте всю цепочку сертификатов в формате файла с кодировкой base64 (PEM).
  • Добавьте сертификаты в цепочку доверия вашего конфигурационного файла доверия GIT Запустите "git config -list". найти конфигурацию "http.sslcainfo", это показывает, где находится файл доверия сертификата. Скопируйте все сертификаты в файл цепочки доверия, включая "-BEGIN-" и "-END-".
  • Убедитесь, что вы добавили целую цепочку сертификатов в файл сертификатов.

Это должно решить вашу проблему с самозаверяющими сертификатами и с помощью GIT.

Я попытался использовать конфигурацию "http.sslcapath", но это не сработало. Также, если я не включил всю цепочку в файл сертификатов, это также потерпит неудачу. Если у кого есть указатели на них, пожалуйста, дайте мне знать, как указано выше, для повторной установки.

Если это система GIT, то вы можете использовать опции в TOOLS → options GIt, чтобы использовать систему GIT, и это также решает проблему в sourcetree.

Ответ 9

В случае GitHub Repositories (или любых неподписанных сертификатов), выбрав приведенное ниже при установке Git-on-windows, удалось решить проблему.

enter image description here

Ответ 10

У меня была эта проблема раньше, и решить ее, используя следующую конфигурацию.

[http "https://your.domain"] sslCAInfo=/path/to/your/domain/priviate-certificate

Так как git 2.3.1, вы можете поместить https://your.domain после http, чтобы указать, что следующий сертификат предназначен только для него.

Ответ 11

  • Загрузить сертификат по этой ссылке: https://github.com/bagder/ca-bundle
  • Добавьте его в C:\Program Files\Git\bin и C:\Program Files\Git\mingw64\bin

Затем попробуйте что-то вроде: git clone https://github.com/heroku/node-js-getting-started.git

Ответ 12

Одна вещь, которая меня испортила, была формат пути (на моем ПК с Windows). У меня изначально было это:

git config --global http.sslCAInfo C:\certs\cacert.pem

Но это не удалось из-за ошибки "невозможно получить сертификат локального эмитента".

Что в итоге сработало, так это:

git config --global http.sslCAInfo "C:\\certs\\cacert.pem"

Ответ 13

Используйте эту команду, прежде чем запускать обновление/установку композитора:

git config --global http.sslverify false