No se puede comunicar de forma segura con un par: sin algorithm (s) de encryption comunes

Soy un usuario de fedora 20. Mientras clonaba un repository, recibí el siguiente error: "Clonación en 'git_missions' … fatal: no se puede acceder a ' https://openhatch.org/git-mission-data/git/hithard/ ': no ​​se puede comunicar de forma segura con par: no hay algorithm (s) de encryption comunes. "

No estoy obteniendo qué hacer? Necesito ayuda.

La solución más simple es usar http lugar de 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. 

Creo que el error en sí mismo ("ningún algorithm de encryption común") es preciso; parece que el server quiere utilizar algún tipo de encryption de curva elíptica (TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256) que no es compatible con la biblioteca SSL subyacente de git. Puede usar algo como wireshark para capturar el protocolo de enlace SSL entre git y el server y ver las opciones que se pasan de ida y vuelta.

Al less en mi sistema, curl no parece ser compatible con este encryption, y git usa libcurl para manejar las conexiones https / http.

Actualizar

Entonces, basado en mi último comentario a @mattdm, en el que descubrí que curl en mi sistema está usando la biblioteca de encryption NSS, funciona lo siguiente:

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

Lamentablemente, no hay forma de pasar una list de encryption a git . El parche para hacerlo es trivial, aquí está una versión que acabo de hacer , pero no sé cuáles son las probabilidades de que esto sea aceptado en la fase inicial.

Lamentablemente, no hay forma de pasar una list de encryption a Git

larsks mencionados en los comentarios :

Me han aceptado un parche en Git que aborda este problema

Eso ha sido efectivamente aceptado, y se fusiona en Git 2.5+ (Q2 2015)

Ver commit f6f2a9e por Lars Kellogg-Stedman ( larsks ) , 08 de mayo de 2015.
(Fusionada por Junio ​​C Hamano – gitster – in commit 39fa791 , 22 de mayo de 2015)

http : agregar soporte para especificar una list de encryption SSL

Enseñe a git una nueva opción, " http.sslCipherList ", que le permite a uno especificar una list de encryptions para usar al negociar conexiones SSL.
La configuration puede ser anulada por la variable de entorno GIT_SSL_CIPHER_LIST .

La página man de git config ahora incluye:

 http.sslCipherList: 

Una list de encryptions SSL para usar al negociar una connection SSL.
Los encryptions disponibles dependen de si libcurl se compiló contra NSS o OpenSSL y la configuration particular de la biblioteca criptográfica en uso.
Internamente esto establece la opción 'CURLOPT_SSL_CIPHER_LIST'; ver la documentation de libcurl para más detalles sobre el formatting de esta list .

Puede ser anulado por la variable de entorno ' GIT_SSL_CIPHER_LIST '.
Para forzar a git a utilizar la list de encryption por defecto de libcurl e ignorar cualquier opción explícita de http.sslCipherList , establezca ' GIT_SSL_CIPHER_LIST ' en la cadena vacía.


Eso puede ser útil en 2015:

  • " Ahora que es 2015, ¿qué suites de encryption SSL / TLS se deben usar en un entorno HTTPS de alta security? "
  • " Endurecimiento de los encryptionres SSL de su server web "
  • Problemas de Nick Craver con SSL / TLS y productividad , con un problema de security ahora fijo ( weakdh.org , el Ataque de Logjam explotando las debilidades en cómo se ha implementado el intercambio de keys Diffie-Hellman).

Actualización de agosto de 2015: Git 2.6+ (Q3 2015) permitirá especificar la versión SSL explícitamente:

http : agregar soporte para especificar la versión SSL

Ver commit 01861cb (14 Aug 2015) por Elia Pinto ( devzero2000 ) .
Ayudado por: Eric Sunshine ( sunshineco ) .
(Fusionada por Junio ​​C Hamano – gitster – in commit ed070a4 , 26 de agosto de 2015)

 http.sslVersion 

La versión SSL para usar al negociar una connection SSL, si desea forzar el valor pnetworkingeterminado.
La versión disponible y la pnetworkingeterminada dependen de si libcurl se creó contra NSS o OpenSSL y la configuration particular de la biblioteca de encryption en uso. Internamente esto establece la opción ' CURLOPT_SSL_VERSION '; Consulte la documentation de libcurl para get más detalles sobre el formatting de esta opción y para la versión ssl compatible.
En realidad, los posibles valores de esta opción son:

  • sslv2
  • sslv3
  • tlsv1
  • tlsv1.0
  • tlsv1.1
  • tlsv1.2

Puede ser anulado por la variable de entorno ' GIT_SSL_VERSION '.
Para forzar a git a usar la versión ssl pnetworkingeterminada de libcurl e ignorar cualquier opción explícita de http.sslversion , establezca 'GIT_SSL_VERSION' en la cadena vacía.