Certificado SSL rechazado al intentar acceder a GitHub a través de HTTPS detrás del firewall

Estoy atrapado detrás de un firewall, así que tengo que usar HTTPS para acceder a mi repository de GitHub. Estoy usando cygwin 1.7.7 en Windows XP.

Intenté configurar el control remoto en https://username@github.com/username/ExcelANT.git , pero https://username@github.com/username/ExcelANT.git indicaciones para get una contraseña, pero no hago nada una vez que la https://username@github.com/username/ExcelANT.git . https://username:<password>github.com/username/ExcelANT.git y clonando el repository vacío desde cero, pero cada vez me da el mismo error

error: problema con el certificate SSL, verifique que el certificate CA esté bien. Detalles:
error: 14090086: rutinas SSL: SSL3_GET_SERVER_CERTIFICATE: la verificación del certificate falló al acceder a https://github.com/username/ExcelANT.git/info/refs

Activar GIT_CURL_VERBOSE=1 me da

* Acerca de conectar () al puerto 443 de github.com (# 0)
* Intentando 207.97.227.239 … * establecer con éxito ubicaciones de verificación de certificates:
* CAfile: none
CApath: / usr / ssl / certs
* Problema de certificate SSL, verifique que el certificate CA esté bien. Detalles:
error: 14090086: rutinas SSL: SSL3_GET_SERVER_CERTIFICATE: no se pudo verificar el certificate
* Vencido despejado
* Conexión de cierre # 0
* Acerca de conectar () al puerto 443 de github.com (# 0)
* Intentando 207.97.227.239 … * establecer con éxito ubicaciones de verificación de certificates:
* CAfile: none
CApath: / usr / ssl / certs
* Problema de certificate SSL, verifique que el certificate CA esté bien. Detalles:
error: 14090086: rutinas SSL: SSL3_GET_SERVER_CERTIFICATE: no se pudo verificar el certificate
* Vencido despejado
* Conexión de cierre # 0
error: problema con el certificate SSL, verifique que el certificate CA esté bien. Detalles:
error: 14090086: rutinas SSL: SSL3_GET_SERVER_CERTIFICATE: la verificación del certificate falló al acceder a https://github.com/username/ExcelANT.git/info/refs

 fatal: HTTP request failed 

¿Es esto un problema con mi firewall, cygwin o qué?

No había configurado el proxy HTTP en la configuration de Git, sin embargo, es un server ISA que necesita authentication NTLM, no es básico, así que, a less que alguien sepa cómo forzar a git a usar NTLM, estoy arruinado.

Siéntase libre de omitir esta respuesta si desea corregir el problema de los certificates. Esta respuesta se refiere a tunneling ssh a través del firewall, que en mi humilde opinión es una mejor solución para tratar con firewall / proxy thingies.

Hay una forma mejor que usar el acceso http y que es usar el service ssh ofrecido por github en el puerto 443 del server ssh.github.com.

Usamos una herramienta llamada sacacorchos. Esto está disponible tanto para CygWin (a través de la configuration de la página principal de cygwin) como para Linux utilizando su herramienta de empaquetado favorita. Para MacOSX está disponible desde macports y brew al less.

La línea de command es la siguiente:

 $ corkscrew <proxyhost> <proxyport> <targethost> <targetport> <authfile> 

El proxyhost y proxyport son las coorderadas del proxy https. El targethost y targetport es la location del host al túnel. El file de authentication es un file de text con 1 línea que contiene su nombre de usuario / contraseña del server proxy separados por dos puntos

p.ej:

 abc:very_secret 

Instalación para usar el protocolo ssh "normal" para la comunicación git

Al agregar esto a ~/.ssh/config este truco se puede usar para conexiones ssh normales.

 Host github.com HostName ssh.github.com Port 443 User git ProxyCommand corkscrew <proxyhost> <proxyport> %h %p ~/.ssh/proxy_auth 

Ahora puedes probar que funciona por ssh-ing a gitproxy

 pti@pti-laptop:~$ ssh github.com PTY allocation request failed on channel 0 Hi ptillemans! You've successfully authenticated, but GitHub does not provide shell access. Connection to github.com closed. pti@pti-laptop:~$ 

(Nota: si nunca ha iniciado session en github anteriormente, ssh le pedirá que agregue la key del server al file de hosts conocido. Si es paranoico, se recomienda verificar la huella digital RSA a la que se muestra en el sitio github donde cargó tu key).

Una ligera variante de este método es el caso cuando necesita acceder a un repository con otra key, por ejemplo, para separar su count privada de su count profesional.

 # # account dedicated for the ACME private github account # Host acme.github.com User git HostName ssh.github.com Port 443 ProxyCommand corkscrew <proxyhost> <3128> %h %p ~/.ssh/proxy_auth IdentityFile ~/.ssh/id_dsa_acme 

¡disfrutar!

Hemos estado usando esto desde hace años en Linux, Mac y Windows.

Si lo deseas, puedes leer más sobre esto en esta publicación de blog

El problema es que no tiene instalados certificates de la Autoridad de certificación en su sistema. Y estos certs no se pueden instalar con cygwin's setup.exe.

Actualización: Instalar el package Net / ca-certificates en cygwin (gracias dirkjot)

Hay dos soluciones:

  1. Ignorar la verificación del certificate SSL.

    ADVERTENCIA: Deshabilitar la verificación del certificate SSL tiene implicaciones de security. Sin la verificación de la autenticidad de las conexiones SSL / HTTPS, un atacante malintencionado puede suplantar a un punto final de confianza (como GitHub u otro host de Git remoto), y usted será vulnerable a un ataque Man-in-the-Middle . Asegúrese de comprender completamente los problemas de security y su model de amenaza antes de usar esto como una solución.

     $ env GIT_SSL_NO_VERIFY=true git clone https://github... 
  2. En realidad, instale certificates raíz. Curl chicos extrajeron para ti los certificates de Mozilla .

    cacert.pem file cacert.pem es lo que estás buscando. Este file contiene> 250 certificaciones CA (no sé cómo confiar en este número de personas). Debe download este file, dividirlo en certificates individuales, ponerlos en / usr / ssl / certs (su CApath) e indexarlos.

    Aquí es cómo hacerlo. Con cygwin setup.exe, se ejecutan los packages curl y openssl:

     $ cd /usr/ssl/certs $ curl http://curl.haxx.se/ca/cacert.pem | awk '{print > "cert" (1+n) ".pem"} /-----END CERTIFICATE-----/ {n++}' $ c_rehash 

    Importante : para usar c_rehash también debe instalar openssl-perl .

La forma más fácil es desactivar la verificación SSL CERT:

 git config --global http.sslVerify false 

Esto evitará que CURL verifique la certificación HTTPS.

Para un solo repository:

 git config http.sslVerify false 

Nota: deshabilitar la verificación de SSL tiene implicaciones de security . Permite ataques Man in the Middle cuando usas Git para transferir datos a través de una networking. Asegúrese de comprender completamente las implicaciones de security antes de usar esto como una solución.

Quería que Git usara el package de certificates actualizado sin replace el que usa todo mi sistema. Aquí se explica cómo hacer que Git use un file específico en mi directory personal:

 mkdir ~/certs curl http://curl.haxx.se/ca/cacert.pem -o ~/certs/cacert.pem 

Ahora actualice .gitconfig para usar esto para la verificación de pares:

 [http] sslCAinfo = /home/radium/certs/cacert.pem 

Tenga en count que estoy usando una ruta absoluta. Git no tiene expansión de ruta aquí, por lo que no puedes usar ~ sin un feo kludge. Alternativamente, puede omitir el file de configuration y establecer la ruta a través de la variable de entorno GIT_SSL_CAINFO en GIT_SSL_CAINFO lugar.

Para solucionar este problema, configure GIT_CURL_VERBOSE=1 . La ruta del file CA que Git está utilizando se mostrará en las líneas que comienzan con "CAfile:" en la salida.

Tenga en count que para que funcione (installation de RVM en CentOS 5.6), tuve que ejecutar lo siguiente:

export GIT_SSL_NO_VERIFY=true

y después de eso, el procedimiento de installation estándar para curling el instalador RVM en bash funcionó de maravilla 🙂

Una solución muy simple: reemplace https: // con git: //

Use git: //the.repository en lugar de https: //the.repository y funcionará.

He tenido este problema en Windows con TortoiseGit y esto lo resolvió.

Como la respuesta más popular (por Alexey Vishentsev) lo tiene:

El problema es que no tiene instalados certificates de la Autoridad de certificación en su sistema. Y estos certs no se pueden instalar con cygwin's setup.exe.

Sin embargo, esa última afirmación es falsa (ahora, o siempre ha sido, no sé).

Todo lo que tiene que hacer es ir a la configuration de cygwin e include el package 'ca-certificates' (está debajo de Net). Esto hizo el truco para mí.

Sé que la pregunta original enumera a Cygwin, pero esta es la solución para CentOS:

 curl http://curl.haxx.se/ca/cacert.pem -o /etc/pki/tls/certs/ca-bundle.crt 

Fuente: http://eric.lubow.org/2011/security/fixing-centos-root-certificate-authority-issues/

Si todo lo que quiere hacer es simplemente usar el cliente de Cygwin git con github.com, hay una manera mucho más simple sin tener que pasar por la molestia de download, extraer, convertir, dividir files de certificates. Proceda de la siguiente manera (supongo que Windows XP con Cygwin y Firefox)

  1. En Firefox, ve a la página de github (cualquiera)
  2. click el icono de github en la barra de direcciones para mostrar el certificate
  3. Haga clic en "más información" -> "mostrar certificate" -> "detalles" y select cada nodo en la jerarquía comenzando por el más superior; para cada uno de ellos click "Exportar" y select el formatting PEM:
    • GTECyberTrustGlobalRoot.pem
    • DigiCertHighAssuranceEVRootCA.pem
    • DigiCertHighAssuranceEVCA-1.pem
    • github.com.pem
  4. Guarde los files anteriores en algún lugar de su disco local, cambie la extensión a .pem y muévalos a / usr / ssl / certs en su installation de Cygwin (Windows: c: \ cygwin \ ssl \ certs)
  5. (opcional) Ejecute c_reshash desde bash.

Eso es.

Por supuesto, esto solo instala una jerarquía de certificates, la que necesita para github. Por supuesto, puede utilizar este método con cualquier otro sitio sin la necesidad de instalar 200 certs de sitios en los que no confíe (necesariamente).

En CentOS 5.x, una yum update openssl simple de yum update openssl actualizó el package openssl que actualizó el file ca-bundle.crt sistema y me solucionó el problema.

Lo mismo puede ser cierto para otras distribuciones.

Para clonar en Windows al configurar SSL verificar a falso:

  git -c http.sslVerify=false clone http://example.com/e.git 

Si desea clonar sin bordar su configuration global.

Si está en Mac OS X, puede instalar el package de ca-cert a través de homebrew :

 $ brew install curl-ca-bundle $ git config --system http.sslcainfo /usr/local/share/ca-bundle.crt 

La fórmula instala el set de certificates en su recurso compartido a través de:

 share.install 'ca-bundle.crt' 

El método de share es solo un alias de /usr/local/share , y el package curl-ca es proporcionado por Mozilla . Es lo que ves referencedo en muchos problemas. Espero que esto ayude, ya que no es muy sencillo acerca de cómo abordar esto en Mac OS X. brew install curl tampoco va a conseguir mucho, ya que solo es barril y no se vinculará (ejecutando which curl siempre generará /usr/bin/curl , que es el pnetworkingeterminado que viene con su sistema operativo). Esta publicación también puede ser de algún valor .

Por supuesto, deberá deshabilitar SSL antes de instalar homebrew ya que es un repository de git. Simplemente haz lo que dice curl cuando se produce un error durante la verificación SSL y:

 $ echo insecure >> ~/.curlrc 

Una vez que hayas instalado homebrew junto con curl-ca-bundle , elimina .curlrc e intenta clonar un repo en github. Asegúrese de que no haya errores y estará listo para comenzar.

NOTA: Si recurre a .curlrc , elimínelo de su sistema en el momento en que .curlrc testing. Este file puede causar problemas importantes, así que úselo con fines temporales y con precaución. brew doctor se quejará en caso de que olvide eliminarlo de su sistema).

NOTA: Si actualiza su versión de git, tendrá que volver a ejecutar este command ya que la configuration de su sistema se borrará (están almacenados en relación con el git binary en function de la versión).

Entonces después de correr:

 $ brew update $ brew upgrade 

Si obtiene una nueva versión de git, simplemente vuelva a ejecutar:

 $ git config --system http.sslcainfo /usr/local/share/ca-bundle.crt 

Y estarás listo.

Por último, si tienes una nueva versión de git, ejecuta:

 $ git config -l --system 

debería darle un error a lo largo de las líneas de

fatal: unable to read config file '/usr/local/Cellar/git/1.8.2.2/etc/gitconfig'

ese es su consejo que necesita decirle a Git dónde está el package de Mozilla.

ACTUALIZAR:

.curlrc puede o no ser el remedio para su problema. En cualquier caso, simplemente instale Mozilla ca-bundle en su máquina, ya sea que deba downloadlo manualmente o no. Eso es lo importante aquí. Una vez que obtienes el package Ca, estás listo para ir. Simplemente ejecute el command git config y señale git al ca-bundle.

ACTUALIZAR

Recientemente tuve que agregar:

export CURL_CA_BUNDLE=/usr/local/share/ca-bundle.crt a mi file .zshenv dot porque estoy usando zsh . la opción de git config funcionó para la mayoría de los casos, pero cuando presioné github sobre SSL (por ejemplo, rvm get stable ), aún encontré problemas con el certificate. @Maverick señaló esto en su comentario, pero solo en caso de que alguien lo omita o asum que no necesariamente necesitan exportar esta variable de entorno además de ejecutar el command git config --system.... Gracias, y espero que esto ayude.

ACTUALIZAR

Parece que el curl-ca-bundle fue eliminado recientemente de homebrew . Hay una recomendación aquí .

Deseará soltar algunos files en:

$(brew --prefix)/etc/openssl/certs

Solucioné este problema usando apt-cyg (un gran instalador similar a apt-get) para download fácilmente los certificates ca (incluyendo Git y muchos más):

 apt-cyg install ca-certificates 

Nota : apt-cyg debe instalarse primero. Puede hacer esto desde la línea de command de Windows:

 cd c:\cygwin setup.exe -q -P wget,tar,qawk,bzip2,subversion,vim 

Cierre el cmd de Windows y abra Cygwin Bash:

 wget rawgit.com/transcode-open/apt-cyg/master/apt-cyg install apt-cyg /bin 

Intenta usar un file .netrc, se autenticará sobre https. Crea una llamada de file .netrc en tu directory de inicio y ponlo en ella:

 machine github.com login myusername password mypass 

Vea esta publicación para más información:

https://plus.google.com/u/0/104462765626035447305/posts/WbwD4zcm2fj

Si usó el sistema operativo basado en Debian, simplemente puede ejecutar

apt-get install ca-certificates

He estado teniendo este mismo problema para Solaris Express 11. Me tomó un time, pero logré encontrar dónde debían colocarse los certificates. Según /etc/openssl/openssl.cnf, la ruta para los certificates es / etc / openssl / certs. Coloqué los certificates generados usando el consejo anterior de Alexey.

Puede verificar que las cosas funcionen usando openssl en la command-line:

 openssl s_client -connect github.com:443 

Encontré el mismo problema para configurar Git en una plataforma de desarrollo queueborativo que tengo que administrar.

Para resolverlo:

  • Actualicé el lanzamiento de Curl instalado en el server. Descargue la última versión en el website Descargue la página de rizo y siga los procedimientos de installation. Actas de installation de rizo

  • Obtenga el certificate de la autoridad que entrega el certificate para el server.

  • Agregue este certificate al file CAcert utilizado por curl. En mi server se encuentra en /etc/pki/tls/certs/ca-bundle.crt .

  • Configure git para usar este file de certificate editando el file .gitconfig y establezca la ruta sslcainfo. sslcainfo= /etc/pki/tls/certs/ca-bundle.crt

  • En la máquina del cliente debe get el certificate y configurar también el file .gitconfig.

Espero que esto ayude a algunos de ustedes.

Mejore la solución de RouMao inhabilitando temporalmente la verificación de GIT / curl ssl en el cmd de Windows:

 set GIT_SSL_NO_VERIFY=true git config --global http.proxy http://<your-proxy>:443 

Lo bueno de esta solución es que solo tiene efecto en la window actual de cmd.

en un rasbery pi que tuve

pi @ raspbmc: ~ $ git clone http: //github.com/andreafabrizi/Dropbox-Uploader .git Clonación en 'Dropbox-Uploader' … error: Problema con el certificate SSL CA (path? access rights?) mientras se accede http: // github.com/andreafabrizi/Dropbox-Uploader.git/info/refs fatal: request HTTP fallida

así que id a

 sudo apt-get install ca-certificates 

entonces

 git clone http://github.com/andreafabrizi/Dropbox-Uploader.git 

trabajó

¿Has revisado tu time?

Rehusé absolutamente hacer inseguras mis operaciones de git y después de probar todo lo que la gente mencionó aquí, me sorprendió que una posible causa por la cual los certificates no pasen la verificación es porque las dates son incorrectas (ya sea la date de caducidad del certificate o el reloj local ).

Puede verificar esto fácilmente escribiendo la date en una terminal. En mi caso (un nuevo Raspberry Pi), el reloj local se estableció en 1970, por lo que un simple ntpdate -u 0.ubuntu.pool.ntp.org arregló todo. Para una rPi, también recomendaría que coloque la siguiente secuencia de commands en una tarea cron diaria (digamos /etc/cron.daily/ntpdate ):

 #!/bin/sh /usr/sbin/ntpdate -u 0.ubuntu.pool.ntp.org 1> /dev/null 2>&1 

Necesitaba los certificates solo para Cygwin y git, así que hice lo que @esquifit publicó. Sin embargo, tuve que ejecutar el paso 5 manualmente, c_rehash no estaba disponible en mi sistema. Seguí esta guía: instalar Certificados de CA en el marco de OpenSSL en su lugar.

Intenté todo, eventualmente busqué en el file hosts y allí había una input aleatoria para github. Eliminar el alias solucionó el problema

% systemroot% \ system32 \ drivers \ etc \ hosts

Simplemente deshabilité la authentication del certificate SSL y usé el nombre de usuario simple contraseña de inicio de session como se muestra a continuación enter image description here

Sé que esto es un poco asqueroso, pero esto es lo que tuve que hacer como usuario de Linux en una installation reciente y mínima del server de openSUSE 12.3:

 zypper in ca-certificates ca-certificates-cacert ca-certificates-mozilla 

Después de eso, estaba en el negocio.

Necesitaba dos cosas:

  1. vaya a la configuration de cygwin e incluya el package ' ca-certificates ' (está debajo de Net) (como se indica en otra parte).

  2. Dile a git dónde encontrar los certificates instalados:

    GIT_SSL_CAINFO = / usr / ssl / certs / ca-bundle.crt GIT_CURL_VERBOSE = 1 git …

    (La opción detallada no es necesaria)

    O almacenando la opción permanentemente:

    git config –global http.sslCAinfo /usr/ssl/certs/ca-bundle.crt

    git …

Tuve el mismo problema. La import o el command de certificate para desactivar la verificación de SSL no funcionaba. Resulta ser una contraseña expirada para proxy de networking. Hubo input de proxy config. en el file .gitconfig presente en mi perfil de usuario de Windows. Acabo de eliminar toda la input y comenzó a funcionar de nuevo.

En un sistema Mac OSX 10.5, pude hacer que funcionara con un método simple. Primero, ejecute los procedimientos de github y la testing, que funcionó bien para mí, mostrando que mi certificate estaba realmente bien. https://help.github.com/articles/generating-ssh-keys

 ssh -T git@github.com 

Luego finalmente noté otro formatting de URL para controles remotos. Probé con los demás, arriba, y no funcionaron. http://git-scm.com/book/ch2-5.html

 git@github.com:MyGithubUsername/MyRepoName.git 

Un simple "git push myRemoteName" funcionó muy bien!

Recientemente (julio de 2014) tuve un problema similar y encontré en OS X (10.9.4) que había expirado el certificate "DigiCert High Assurance EV Root CA" (aunque tuve otro no expirado también).

  1. Acceso abierto a llavero
  2. search certificates para "DigiCert"
  3. Ver menu> Mostrar certificates caducados

Encontré dos certificates denominados "DigiCert High Assurance EV Root CA", uno venció en noviembre de 2031 y el venció en julio de 2014 (algunos días antes). Eliminar el certificate caducado resolvió el problema por mí.

Espero que esto ayude.

Para aquellos que usan Msys / MinGW GIT, agregue esto

  export GIT_SSL_CAINFO=/mingw32/ssl/certs/ca-bundle.crt