GIT для Windows – Не удалось получить рукопожатие, соединение SSL/TLS не удалось.

Вопрос или проблема

По этой теме было задано много вопросов, но ни один из них не имеет окончательного ответа.

Я работаю в Visual Studio 2017 (v15.8.5) в корпоративной сети, за прокси, с Git-репозиториями на Azure DevOps (ранее VSTS).

Когда я пытаюсь что-то сделать с репо (Push/Pull/Sync и т.д.), я постоянно получаю ошибки SSL certificate problem: unable to get local issuer certificate. Ошибка возникает как при использовании Team Explorer в V/Studio, так и при использовании команд Git в CMD (в окне администратора).

Чтобы решить эту проблему, в большинстве ответов рекомендовали использовать Git Credential Manager For Windows, в Got For Windows, поэтому теперь у меня версия v2.19.1

Теперь я получаю Failed to receive handshake, SSL/TLS connection failed

Если я отключаюсь от корпоративной LAN и подключаюсь к открытому WiFi (дома, 4G), то всё работает абсолютно нормально, так что очевидно, что что-то связано с тем, как Git и прокси моей компании взаимодействуют друг с другом.

Это мой глобальный .gitconfig

[user]
    name = xxxxxxxxx
    email = [email protected]
[http]
    sslcapath = C:/Program Files/Git/usr/ssl/certs
    sslCAInfo = C:/Program Files/Git/usr/ssl/certs/ca-bundle.crt
    sslBackend = schannel

Если бы у меня были волосы, я бы их выдрал … Пожалуйста, помогите кто-нибудь..

Решением для меня было:

установить http.schannelcheckrevoke=false (требуется git >= 2.19, см. https://stackoverflow.com/a/53090169/3813064)

Обратите внимание, что schannel использует “Библиотеку нативных защищенных каналов Windows” (в которой ваша IT-отдел сохраняет также SSL-сертификаты вашей компании), а не OpenSSL. Следовательно, установка sslCAInfo не будет иметь никакого эффекта, насколько я знаю.

Связанный вопрос:
https://stackoverflow.com/questions/46472724/why-schannel-fails-to-receive-handshake-from-the-server

В общем: Убедитесь, что настройки http.proxy установлены правильно. Вы проверяли их?

Попробуйте клонировать что-то за прокси с использованием http.sslVerify=False, чтобы исключить возможность проблемы с прокси.

Обратите внимание также, что VisualStudio использует собственный бинарный файл Git. Так что сначала проверьте в командной строке и убедитесь, что используется правильный бинарный файл git (where git и git --version)

Ответ или решение

При возникновении ошибки "Failed to receive handshake, SSL/TLS connection failed" в Git для Windows, особенно в среде, где вы находитесь за корпоративным прокси-сервером, важно понимать, что проблема может быть связана с особенностями настройки сети и использования определённых библиотек для шифрования. Рассмотрим, как можно подойти к решению этой проблемы, используя TEA (Theory, Example, Application) подход.

Теория (Theory):

Проблема с SSL/TLS соединением часто возникает из-за неправильной настройки сертификатов или конфигураций сети. Git использует HTTPS для безопасного взаимодействия с репозиториями, и поэтому полагается на SSL/TLS протоколы для установления защищённого соединения. Когда вы находитесь за корпоративным прокси, частой причиной проблем может быть то, что прокси-сервер или корпоративная сеть внедряют свои собственные сертификаты для шифрования, что может вызвать конфликт с настройками Git.

Когда говорится о "handshake", это относится к процессу первичного обмена ключами между клиентом и сервером для установления шифрованного канала. Если "handshake" не удаётся, это может означать, что клиент (в данном случае, Git) не может доверять сертификату сервера или есть проблема на сетевом уровне, которая препятствует успешному завершению этого процесса.

Пример (Example):

Ваш сценарий: Вы разрабатываете в Visual Studio 2017 и работаете с репозиториями Git на Azure DevOps. Ошибка "SSL certificate problem: unable to get local issuer certificate" указывает на то, что Git не может проверить цепочку сертификации SSL/TLS. Это может быть связано с тем, что сертификаты, хранящиеся в системе, не соответствуют тем, которые предоставляет сервер.

Когда вы отключаетесь от корпоративной сети и подключаетесь к открытой WiFi-сети, проблема исчезает. Это лишний раз подтверждает, что проблема, скорее всего, связана с корпоративной сетью.

После установки Git Credential Manager и обновления Git до версии 2.19.1, ошибка изменилась на "Failed to receive handshake, SSL/TLS connection failed". Это изменение ошибки подчёркивает роль настроек шифрования и прокси в проблеме.

Применение (Application):

  1. Проверка прокси-настроек: Убедитесь, что прокси-настройки в Git корректны. Попробуйте выполнить команду в командной строке: git config --global --get http.proxy. Если прокси настроен, попробуйте отключить валидацию SSL для диагностики командой: git config --global http.sslVerify false. Это временная мера для проверки, если дело именно в валидации.

  2. Настройка Schannel: Ваш .gitconfig файл указывает на использование библиотеки Schannel через настройку sslBackend = schannel. Убедитесь, что в вашей системе хранятся все необходимые корпоративные сертификаты. Настройка schannel позволяет Git использовать сертификаты, которые могут быть установлены вашими IT-администраторами в Windows хранилище сертификатов.

  3. Отключение проверки отзыва сертификатов: Установка параметра http.schannelCheckRevoke=false может помочь решить проблемы, связанные с проверкой отзыва сертификатов, которые могут быть неправильно настроены вашим прокси-сервером.

  4. Проверка правильной версии Git: Убедитесь, что используемая версия Git соответствует ожидаемой, с помощью команд: where git и git --version, особенно если вы работаете в среде Visual Studio, которая может иметь свою собственную версию Git.

  5. Дополнительные тесты на уровнях разных подключений: Используйте командную строку для проверки работы Git команд без участия Visual Studio, чтобы исключить потенциальные проблемы, связанные с интеграцией в среде IDE.

  6. Консультация с IT-отделом: Поскольку возникновение ошибок напрямую связано с корпоративной сетью, обратитесь к вашему IT-отделу для проверки политик безопасности и правильности установки необходимых сертификатов.

Следуя этим шагам, вы сможете гораздо быстрее определить источник проблемы и взять его под контроль. Надеемся, вышеописанные шаги помогут вам разрешить возникшую проблему и позволят успешно работать с Git в корпоративной среде.

Оцените материал
Добавить комментарий

Капча загружается...