Я использую 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, чтобы принять самоподписанный сертификат?
Ответ на этот вопрос Использование makecert для разработки SSL исправил это для меня.
Я не знаю, почему, но сертификат, созданный простой ссылкой "Создать самостоятельный сертификат" в диспетчере IIS, не делает этого. Я следовал подходу в связанном вопросе о создании и установке самозаверяющего CA Root; затем с помощью этого выдать сертификат аутентификации сервера для моего сервера. Я установил их оба в IIS.
Это делает мою ситуацию такой же, как и запись в блоге, на которую ссылается исходный вопрос. После того, как корневой сертификат был скопирован/вставлен в curl-ca-bundle.crt, команда git/curl была удовлетворена.
Откройте Git Bash и запустите команду, если вы хотите полностью отключить проверку SSL.
git config --global http.sslVerify false
Примечание. Это решение может открыть для вас атаки типа "человек посередине". Поэтому снова включите проверку как можно скорее:
git config --global http.sslVerify true
У меня тоже была эта проблема. В моем случае я пытался получить 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 и не рекомендуется в качестве долгосрочного решения.
kiddailey Я думаю, что это было довольно близко, однако я бы не отключил проверку ssl, а скорее предоставил локальный сертификат:
В конфигурационном файле Git
[http]
sslCAinfo = /bin/curl-ca-bundle.crt
Или через командную строку:
git config --global http.sslCAinfo /bin/curl-ca-bundle.crt
git config --global http.sslCAinfo /usr/ssl/certs/ca-bundle.crt
git config --global http.sslCAinfo /c/Program\ Files\ \(x86\)/Git/bin/curl-ca-bundle.crt
Я тоже столкнулся с этой проблемой. И, наконец, решена, получив руководство из этого блога MSDN.
Обновить
На самом деле вам нужно добавить сертификат в файл сертификатов git curl-ca-bundel.cert, который находится в каталоге Git\bin.
меры
Наконец, проверьте статус. Обратите внимание, что перед редактированием сделайте резервную копию файла curl-ca-bundle.crt, чтобы сохранить его в безопасности.
Чтобы полностью не отключать проверку 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 выключена, подлежит возможному человеку в середине атаки.
--global
не обязательна: если вы опустите --global
, настройка применяется только к этому конкретному git-репо.
У меня была одна и та же проблема, но с использованием sourcetree на Windows. Аналогичные шаги для обычного GIT в Windows. Следуя следующим шагам, я смог решить эту проблему.
Это должно решить вашу проблему с самозаверяющими сертификатами и с помощью GIT.
Я попытался использовать конфигурацию "http.sslcapath", но это не сработало. Также, если я не включил всю цепочку в файл сертификатов, это также потерпит неудачу. Если у кого есть указатели на них, пожалуйста, дайте мне знать, как указано выше, для повторной установки.
Если это система GIT, то вы можете использовать опции в TOOLS → options GIt, чтобы использовать систему GIT, и это также решает проблему в sourcetree.
Проблема в том, что 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 проще в настройке и с меньшей вероятностью блокируется брандмауэром, что означает меньшую вероятность сбоя.
В случае GitHub Repositories (или любых неподписанных сертификатов), выбрав приведенное ниже при установке Git-on-windows, удалось решить проблему.
У меня была эта проблема раньше, и решить ее, используя следующую конфигурацию.
[http "https://your.domain"]
sslCAInfo=/path/to/your/domain/priviate-certificate
Так как git 2.3.1, вы можете поместить https://your.domain
после http, чтобы указать, что следующий сертификат предназначен только для него.
git config --global http.sslCAInfo <your-server-self-signed-cert.pem>
(следовательно, возникает ошибка «невозможно получить сертификат локального эмитента») )
C:\Program Files\Git\bin
и C:\Program Files\Git\mingw64\bin
Затем попробуйте что-то вроде: git clone https://github.com/heroku/node-js-getting-started.git
Используйте эту команду, прежде чем запускать обновление/установку композитора:
git config --global http.sslverify false