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

195

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

Теги:
curl
ssl-certificate
msysgit

12 ответов

38
Лучший ответ

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

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

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

  • 0
    «Я не знаю почему, но сертификат, созданный с помощью простой ссылки« Создать самоподписанный сертификат »в IIS Manager, не справляется с задачей…» - лучшее, что я могу сказать, это создание искаженных сертификатов. Существует множество правил при создании сертификатов X.509; «Сделай минимум, чтобы заставить его работать» больше не работает хорошо. См. Также раздел Как подписать запрос на подпись сертификата в вашем центре сертификации и как создать самозаверяющий сертификат с помощью openssl?
  • 0
    Это сработало для меня, но я был временно зациклен на части «Я установил их обоих в IIS». Для подтверждения других ... серверный сертификат назначен в IIS, а корневой ЦС необходимо импортировать в «Доверенные корневые центры сертификации» с помощью утилиты диспетчера сертификатов Windows (certmgr.msc).
171

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

git config --global http.sslVerify false

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

git config --global http.sslVerify true
  • 37
    Этот ответ наносит ущерб безопасности SSL, разрешая атаки «человек посередине». Другие ответы уже объясняют, как настроить git для доверия конкретному сертификату, который вам нужен.
  • 8
    действительно ужасный ответ, вы даже не говорите им включить SSL. Вот почему происходят уязвимости в безопасности.
Показать ещё 5 комментариев
84

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

  • 114
    Это противоречит цели SSL.
  • 49
    вы можете использовать команду "git config --global http.sslVerify false", чтобы отключить проверку SSL
Показать ещё 4 комментария
44

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

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

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

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

git config --global http.sslCAinfo /bin/curl-ca-bundle.crt
  • 3
    В git для windows это git config --global http.sslCAinfo /usr/ssl/certs/ca-bundle.crt
  • 0
    Или для меня git config --global http.sslCAinfo /c/Program\ Files\ \(x86\)/Git/bin/curl-ca-bundle.crt
Показать ещё 3 комментария
36

Я тоже столкнулся с этой проблемой. И, наконец, решена, получив руководство из этого блога 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, чтобы сохранить его в безопасности.

  • 3
    "перейдите в каталог Git \ bin и откройте curl-ca-bundle.crt" В git \ bin нет curl-ca-bundle.crt!
  • 0
    @AntonK, если он не существует, создайте его самостоятельно в блокноте и переименуйте в curl-ca-bundle.crt. Другие шаги остаются такими же.
Показать ещё 2 комментария
18

Чтобы полностью не отключать проверку 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 выключена, подлежит возможному человеку в середине атаки.

  • 0
    Возможно, стоит отметить, что опция --global не обязательна: если вы опустите --global , настройка применяется только к этому конкретному git-репо.
16

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

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

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

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

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

  • 2
    «если бы я не включил всю цепочку в файл сертификатов, то это тоже не получится» - я просто столкнулся с этой проблемой
  • 0
    Что касается всей цепочки, у меня есть два сертификата над сертификатом github. Нужно ли включать их по порядку как root-> next cert-> github cert в файл sslcainfo.crt?
Показать ещё 1 комментарий
15

Проблема в том, что 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 проще в настройке и с меньшей вероятностью блокируется брандмауэром, что означает меньшую вероятность сбоя.

  • 4
    Вы заслуживаете еще много голосов
  • 0
    Это сработало отлично, спасибо :)
Показать ещё 2 комментария
6

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

Изображение 7319

  • 0
    Вы, похоже, ответили на другой вопрос. Вопрос ОП касался самозаверяющих сертификатов на клиентах Windows.
  • 0
    @jww заголовок вопроса - это сообщение об ошибке git, которое отображается, даже если репозиторий НЕ является самозаверяющим SSL!
Показать ещё 1 комментарий
3

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

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

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

  • 0
    Это самое простое и точное решение, которое я нашел, если вы ранее настраивали git config --global http.sslCAInfo <your-server-self-signed-cert.pem> (следовательно, возникает ошибка «невозможно получить сертификат локального эмитента») )
1
  • Загрузить сертификат по этой ссылке: 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

-5

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

git config --global http.sslverify false

Ещё вопросы

Сообщество Overcoder
Наверх
Меню