Невозможно безопасно общаться с одноранговым узлом: нет общих алгоритмов шифрования

Я пользователь fedora 20. При клонировании хранилища я получил следующую ошибку: "Клонирование в" git_missions "... fatal: невозможно получить доступ к" https://openhatch.org/git-mission-data/git/hithard/": Невозможно безопасно связаться с одноранговый: нет общих алгоритмов шифрования. "

Я не понимаю, что делать? Нужна помощь.

2 ответа

Решение

Самое простое решение - просто использовать http вместо https:

$ git clone http://openhatch.org/git-mission-data/git/hithard/
Cloning into 'hithard'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
Checking connectivity... done.

Я думаю, что сама ошибка ("нет общих алгоритмов шифрования") является точной; Похоже, что сервер хочет использовать своего рода шифр с эллиптической кривой (TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256), который не поддерживается базовой библиотекой SSL git. Вы можете использовать что-то вроде wireshark чтобы захватить рукопожатие SSL между git и сервером и увидеть параметры, передаваемые туда и обратно.

По крайней мере, в моей системе, curl похоже, не поддерживает этот шифр, и git использования libcurl для обработки соединений https / http.

Обновить

Итак, основываясь на моем последнем комментарии к @mattdm, в котором я обнаружил, что curl в моей системе используется криптографическая библиотека NSS, работает следующее:

curl --ciphers ecdhe_ecdsa_aes_128_gcm_sha_256 https://openhatch.org/

К сожалению, нет никакого способа передать список шифров git, Патч, чтобы сделать это, тривиален - вот одна версия, которую я только что сделал - но я не знаю, какова вероятность того, что это будет принято в апстриме.

К сожалению, нет никакого способа передать список шифров в git

larsks упоминается в комментариях:

Я получил патч для Git, который решает эту проблему

Это было действительно принято, и объединить в Git 2.5+ (2 квартал 2015 г.)

Смотрите коммит f6f2a9e Ларса Келлог-Стедмана ( larsks ), 08 мая 2015 г.
(Объединено Юнио С Хамано - gitster - в комитете 39fa791 от 2 2 мая 2015 г.)

http: добавить поддержку для указания списка шифров SSL

Научите Git о новой опции, " http.sslCipherList ", который позволяет указать список шифров, которые будут использоваться при согласовании соединений SSL.
Настройка может быть отменена GIT_SSL_CIPHER_LIST переменная окружения.

git config Страница man теперь включает в себя:

http.sslCipherList:

Список шифров SSL для использования при согласовании соединения SSL.
Доступные шифры зависят от того, была ли libcurl построена на NSS или OpenSSL, и от конкретной конфигурации используемой криптографической библиотеки.
Внутренне это устанавливает параметр 'CURLOPT_SSL_CIPHER_LIST'; см. документацию libcurl для более подробной информации о формате этого списка.

Может быть отменено GIT_SSL_CIPHER_LIST переменная окружения.
Чтобы заставить git использовать список шифров по умолчанию в libcurl и игнорировать любые явные http.sslCipherList опция, установить ' GIT_SSL_CIPHER_LIST к пустой строке.


Это может пригодиться в 2015 году:


Обновление август 2015: Git 2.6+ (3 квартал 2015 года) позволит явно указать версию SSL:

http: добавить поддержку для указания версии SSL

См. Коммит 01861cb (14 августа 2015 г.) от Elia Pinto ( devzero2000 )
Помогает: Эрик Саншайн ( sunshineco )
(Объединено Юнио С Хамано - gitster - в комм. ред. 070a4, 26 августа 2015 г.)

http.sslVersion

Версия SSL, используемая при согласовании соединения SSL, если вы хотите принудительно установить значение по умолчанию.
Доступная версия и версия по умолчанию зависят от того, была ли библиотека libcurl построена на NSS или OpenSSL, а также от конкретной конфигурации используемой криптографической библиотеки. Внутренне это устанавливает CURLOPT_SSL_VERSION вариант; см. документацию по libcurl для получения дополнительной информации о формате этой опции и поддерживаемой версии ssl.
На самом деле возможные значения этой опции:

  • SSLv2
  • SSLv3
  • TLSv1
  • tlsv1.0
  • tlsv1.1
  • tlsv1.2

Может быть отменено GIT_SSL_VERSION переменная окружения.
Заставить git использовать ssl-версию libcurl по умолчанию и игнорировать любые явные http.sslversion опцию, установите 'GIT_SSL_VERSION' в пустую строку.

Другие вопросы по тегам