Certificado SSL rejeitado tentando acessar o GitHub via HTTPS por trás do firewall

Estou preso atrás de um firewall, então tenho que usar HTTPS para acessar meu repository GitHub. Estou usando o cygwin 1.7.7 no Windows XP.

Eu tentei configurar o controle remoto para https://username@github.com/username/ExcelANT.git , mas empurrar solicita uma senha, mas não faz nada depois de https://username@github.com/username/ExcelANT.git la. https://username:github.com/username/ExcelANT.git e clonar o https://username:github.com/username/ExcelANT.git vazio a partir do zero, mas sempre que https://username:github.com/username/ExcelANT.git o mesmo erro

erro: problema de certificado SSL, verifique se o certificado da CA está correto. Detalhes:
Erro: 14090086: rotinas SSL: SSL3_GET_SERVER_CERTIFICATE: falha na verificação do certificado ao acessar https://github.com/username/ExcelANT.git/info/refs

Ativando GIT_CURL_VERBOSE=1 me dá

* Sobre conectar () a porta 443 do github.com (# 0)
* Tentando 207.97.227.239 … * definir com sucesso locais de verificação de certificados:
* Arquivo CA: nenhum
Roteiro: / usr / ssl / certs
* Problema de certificado SSL, verifique se o certificado da CA está correto. Detalhes:
Erro: 14090086: rotinas SSL: SSL3_GET_SERVER_CERTIFICATE: verificação de certificado falhou
* Expirar limpo
* Conexão de fechamento # 0
* Sobre conectar () a porta 443 do github.com (# 0)
* Tentando 207.97.227.239 … * definir com sucesso locais de verificação de certificados:
* Arquivo CA: nenhum
Roteiro: / usr / ssl / certs
* Problema de certificado SSL, verifique se o certificado da CA está correto. Detalhes:
Erro: 14090086: rotinas SSL: SSL3_GET_SERVER_CERTIFICATE: verificação de certificado falhou
* Expirar limpo
* Conexão de fechamento # 0
erro: problema de certificado SSL, verifique se o certificado da CA está correto. Detalhes:
Erro: 14090086: rotinas SSL: SSL3_GET_SERVER_CERTIFICATE: falha na verificação do certificado ao acessar https://github.com/username/ExcelANT.git/info/refs

 fatal: HTTP request failed 

Isso é um problema com o meu firewall, cygwin ou o que?

Eu não tinha definido o proxy HTTP na configuração do Git, no entanto, é um servidor ISA que precisa de autenticação NTLM, não básico, então a menos que alguém saiba como forçar o git a usar o NTLM, eu estou corrompido.

    Sinta-se à vontade para ignorar esta resposta se quiser corrigir o problema dos certificados. Esta resposta lida com tunelamento ssh através do firewall que é IMHO uma solução melhor para lidar com coisinhas de firewall / proxy.

    Existe uma maneira melhor do que usar o access http, que é usar o serviço ssh oferecido pelo github na porta 443 do servidor ssh.github.com.

    Nós usamos uma ferramenta chamada saca-rolhas. Isso está disponível tanto para o CygWin (através da instalação da página inicial do cygwin) quanto para o Linux usando sua ferramenta de empacotamento favorita. Para o MacOSX, ele está disponível no Macports e pelo menos no brew.

    A linha de comando é a seguinte:

     $ corkscrew      

    O proxyhost e proxyport são as coordenadas do proxy https. O targethost e targetport é o local do host para o encapsulamento. O authfile é um arquivo de texto com uma linha contendo seu nome de usuário / senha do servidor proxy separados por dois pontos

    por exemplo:

     abc:very_secret 

    Instalação para usar o protocolo ssh “normal” para comunicação git

    Adicionando isto ao ~/.ssh/config este truque pode ser usado para conexões ssh normais.

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

    agora você pode testá-lo funciona por ssh-ing para 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:~$ 

    (Observação: se você nunca efetuou login no github antes, o ssh perguntará se deseja adicionar a chave do servidor ao arquivo de hosts conhecidos. Se você é paranóico, é recomendável verificar a impressão digital da RSA para o arquivo mostrado no site do github. carregou sua chave).

    Uma ligeira variante deste método é o caso quando você precisa acessar um repository com outra chave, por exemplo, para separar sua conta particular de sua conta profissional.

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

    apreciar!

    Estamos usando isso há anos no Linux, Macs e Windows.

    Se você quiser, pode ler mais sobre isso neste blog

    O problema é que você não possui nenhum certificado de Autoridade de Certificação instalado em seu sistema. E esses certificados não podem ser instalados com o setup.exe do cygwin.

    Atualização: Instale o pacote Net / ca-certificates no cygwin (obrigado dirkjot)

    Existem duas soluções:

    1. Na verdade, instale os certificados raiz. O pessoal da Curl extraiu para você certificados da Mozilla .

      cacert.pem arquivo cacert.pem é o que você está procurando. Este arquivo contém> 250 CER (não sabe como confiar nesse número de ppl). Você precisa fazer o download deste arquivo, dividi-lo em certificados individuais, colocá-los em / usr / ssl / certs (seu caminho) e indexá-los.

      Aqui está como fazer isso. Com o setup do cygwin setup.exe, os pacotes curl e openssl executam:

       $ 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 o c_rehash você também precisa instalar o openssl-perl .

    2. Ignore a verificação do certificado SSL.

      AVISO: Desativar a verificação de certificado SSL tem implicações de segurança. Sem a verificação da autenticidade das conexões SSL / HTTPS, um invasor mal-intencionado pode se passar por um endpoint confiável (como o GitHub ou algum outro host Git remoto) e você estará vulnerável a um ataque Man-in-the-middle . Certifique-se de entender completamente os problemas de segurança e seu modelo de ameaça antes de usar isso como uma solução.

       $ env GIT_SSL_NO_VERIFY=true git clone https://github... 

    Nota: desativar a verificação de SSL tem implicações de segurança . Ele permite ataques Man in the Middle quando você usa o Git para transferir dados através de uma rede. Certifique-se de entender completamente as implicações de segurança antes de usar isso como uma solução. Ou melhor ainda, instale os certificados raiz.

    Uma maneira é desativar a verificação SSL CERT:

     git config --global http.sslVerify false 

    Isso impedirá que o CURL verifique a certificação HTTPS.

    Apenas para um repository:

     git config http.sslVerify false 

    Eu queria que o Git usasse o pacote de certificados atualizado sem replace o que todo o meu sistema usa. Veja como fazer com que o Git use um arquivo específico no meu diretório pessoal:

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

    Agora atualize o .gitconfig para usar isso para verificação de peer:

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

    Note que estou usando um caminho absoluto. O Git não faz expansão de caminho aqui, então você não pode usar ~ sem um kludge feio. Alternativamente, você pode pular o arquivo de configuração e definir o caminho através da variável de ambiente GIT_SSL_CAINFO .

    Para solucionar isso, defina GIT_CURL_VERBOSE=1 . O caminho do arquivo CA que o Git está usando será mostrado nas linhas que começam com “CAfile:” na saída.

    Note que para eu conseguir este trabalho (instalação do RVM no CentOS 5.6), eu tive que executar o seguinte:

    export GIT_SSL_NO_VERIFY=true

    e depois disso, o procedimento de instalação padrão para curling o instalador do RVM no bash funcionava como um tratamento 🙂

    Uma solução muito simples: substitua https: // por git: //

    Use git: //the.repository em vez de https: //the.repository e funcionará.

    Eu tive esse problema no Windows com o TortoiseGit e isso resolveu.

    Como a resposta mais popular (por Alexey Vishentsev) tem:

    O problema é que você não possui nenhum certificado de Autoridade de Certificação instalado em seu sistema. E esses certificados não podem ser instalados com o setup.exe do cygwin.

    No entanto, essa última afirmação é falsa (agora, ou sempre foi, eu não sei).

    Tudo o que você precisa fazer é ir para o setup do cygwin e include o pacote ‘ca-certificates’ (ele está sob o Net). Isso fez o truque para mim.

    Eu sei que a pergunta original lista o Cygwin, mas aqui está a solução para o CentOS:

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

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

    No CentOS 5.x, uma simples yum update openssl atualizou o pacote openssl que atualizou o arquivo ca-bundle.crt sistema e corrigiu o problema para mim.

    O mesmo pode ser verdade para outras distribuições.

    Se tudo o que você quer fazer é usar o cliente git do Cygwin com o github.com, existe uma maneira muito mais simples sem ter que passar pelo incômodo de baixar, extrair, converter, dividir arquivos certificados. Proceda da seguinte forma (estou supondo que o Windows XP com Cygwin e Firefox)

    1. No Firefox, vá para a página do github (qualquer)
    2. clique no ícone do github na barra de endereços para exibir o certificado
    3. Clique em “mais informações” -> “exibir certificado” -> “detalhes” e selecione cada nó na hierarquia começando com o mais alto; Para cada um deles, clique em “Exportar” e selecione o formato PEM:
      • GTECyberTrustGlobalRoot.pem
      • DigiCertHighAssuranceEVRootCA.pem
      • DigiCertHighAssuranceEVCA-1.pem
      • github.com.pem
    4. Salve os arquivos acima em algum lugar da sua unidade local, altere a extensão para .pem e mova-os para / usr / ssl / certs na instalação do Cygwin (Windows: c: \ cygwin \ ssl \ certs)
    5. (opcional) Executar c_reshash do bash.

    É isso aí.

    É claro que isso só instala uma hierarquia cert, a que você precisa para o github. É claro que você pode usar esse método com qualquer outro site sem a necessidade de instalar 200 certificados de sites nos quais você não confia (necessariamente).

    Para clonar janelas enquanto configura SSL, verifique para falso:

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

    Se você quiser clonar sem comprometer suas configurações globais.

    Se você está no Mac OS X, você pode instalar o pacote ca-cert via homebrew :

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

    A fórmula instala o pacote de certificados no seu compartilhamento por meio de:

     share.install 'ca-bundle.crt' 

    O método de share é apenas um alias para /usr/local/share , e o pacote curl-ca é fornecido pela Mozilla . É o que você vê sendo referenciado em muitos problemas. Espero que isso ajude, já que não é muito simples sobre como abordar isso no Mac OS X. O brew install curl não vai te dar muito, já que é apenas um barril e não será vinculado (rodando em which curl sempre irá gerar /usr/bin/curl , que é o padrão que vem com o seu sistema operacional). Este post também pode ser de algum valor .

    Você certamente precisará desativar o SSL antes de instalar o homebrew já que é um repository do git. Basta fazer o que o curl diz quando cometer erros durante a verificação SSL e:

     $ echo insecure >> ~/.curlrc 

    Depois de instalar o homebrew junto com o curl-ca-bundle , exclua .curlrc e tente clonar um repo no github. Certifique-se de que não há erros e você será bom para ir.

    OBSERVAÇÃO: Se você recorrer ao .curlrc , remova-o do seu sistema assim que terminar de testar. Este arquivo pode causar grandes problemas, portanto, use-o para fins temporários e com cuidado. brew doctor vai reclamar no caso de você esquecer de purgá-lo do seu sistema).

    OBSERVAÇÃO: Se você atualizar sua versão do git, será necessário executar novamente este comando, pois as configurações do sistema serão eliminadas (elas são armazenadas em relação ao binário do git com base na versão).

    Então, depois de correr:

     $ brew update $ brew upgrade 

    Se você obtiver uma nova versão do git, execute novamente:

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

    E você estará tudo pronto.

    Por fim, se você tiver uma nova versão do git, executando:

     $ git config -l --system 

    deve dar um erro ao longo das linhas de

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

    essa é a sua dica que você precisa dizer ao git onde está o pacote ca do Mozilla.

    ATUALIZAR:

    .curlrc pode ou não ser o remédio para o seu problema. Em qualquer caso, é só pegar o ca-bundle Mozilla instalado em sua máquina se você tem que baixá-lo manualmente ou não. Isso é o que é importante aqui. Depois de conseguir o pacote, é bom ir. Basta executar o comando git config e apontar o git para o pacote ca.

    ATUALIZAR

    Recentemente tive que adicionar:

    export CURL_CA_BUNDLE=/usr/local/share/ca-bundle.crt para o meu arquivo .zshenv desde que eu esteja usando o zsh . a opção git config do git config funcionou para a maioria dos casos, mas ao atingir o github sobre SSL (por exemplo, o rvm get stable ), ainda me deparei com problemas de certificado. @Maverick apontou isto em seu comentário, mas apenas no caso de alguém errar ou assumir que eles não necessariamente precisam exportar esta variável de ambiente além de rodar o comando git config --system.... Obrigado e espero que isso ajude.

    ATUALIZAR

    Parece que o pacote curl-ca foi recentemente removido do homebrew . Há uma recomendação aqui .

    Você vai querer soltar alguns arquivos em:

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

    Eu consertei esse problema usando o apt-cyg (um ótimo instalador similar ao apt-get) para facilmente baixar os certificados de ca (incluindo o Git e muitos outros):

     apt-cyg install ca-certificates 

    Nota : o apt-cyg deve ser instalado primeiro. Você pode fazer isso a partir da linha de comando do Windows:

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

    Feche o Windows cmd e abra o Cygwin Bash:

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

    em um pi rasbery eu tive

    pi @ raspbmc: ~ $ git clone http: //github.com/andreafabrizi/Dropbox-Uploader .git Clonando em ‘Dropbox-Uploader’ … error: Problema com o certificado SSL da CA (caminho? direitos de access?) durante o access http: // github.com/andreafabrizi/Dropbox-Uploader.git/info/refs fatal: falha na solicitação HTTP

    então id a

     sudo apt-get install ca-certificates 

    então

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

    trabalhado

    Se você usou o sistema operacional baseado no Debian, você pode simplesmente executar

    apt-get install ca-certificates

    Eu tenho tido esse mesmo problema com o Solaris Express 11. Demorei um pouco, mas consegui descobrir onde os certificados precisavam ser colocados. De acordo com /etc/openssl/openssl.cnf, o caminho para os certificados é / etc / openssl / certs. Coloquei os certificados gerados usando o conselho acima de Alexey.

    Você pode verificar se as coisas estão funcionando usando o openssl na linha de comando:

     openssl s_client -connect github.com:443 

    Tente usar um arquivo .netrc, ele será autenticado por meio de https. Crie uma chamada de arquivo .netrc no seu diretório home e coloque isso nela:

     machine github.com login myusername password mypass 

    Veja este post para mais informações:

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

    Melhore a solução do RouMao desativando temporariamente a verificação do GIT / curl ssl no Windows cmd:

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

    O bom desta solução é que ela só entra em vigor na janela atual do cmd.

    Você já verificou o seu tempo?

    Eu absolutamente me recusei a tornar as minhas operações do git inseguras e depois de tentar todas as pessoas mencionadas aqui, percebi que uma das possíveis razões pelas quais os certificados não passam na verificação é que as datas estão erradas (a data de validade do certificado ou o relógio local ).

    Você pode verificar isso facilmente digitando date em um terminal. No meu caso (um novo Pi framboesa), o relógio local foi definido para 1970, então um simples ntpdate -u 0.ubuntu.pool.ntp.org corrigiu tudo. Para um rPi, também recomendo que você coloque o seguinte script em uma tarefa cron diária (digamos /etc/cron.daily/ntpdate ):

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

    Eu encontrei o mesmo problema para configurar o Git em uma plataforma de desenvolvimento colaborativo que eu tenho que gerenciar.

    Para resolvê-lo:

    • Eu atualizei o release do Curl instalado no servidor. Faça o download da última versão no site Faça o download da página de enrolar e siga os procedimentos de instalação.

    • Receba de volta o certificado da autoridade que entrega o certificado para o servidor.

    • Adicione este certificado ao arquivo CAcert usado pelo curl. No meu servidor, ele está localizado em /etc/pki/tls/certs/ca-bundle.crt .

    • Configure o git para usar este arquivo de certificado editando o arquivo .gitconfig e defina o caminho sslcainfo. sslcainfo= /etc/pki/tls/certs/ca-bundle.crt

    • Na máquina cliente, você deve obter o certificado e configurar o arquivo .gitconfig também.

    Espero que isso ajude alguns de vocês.

    Eu tentei de tudo, eventualmente eu olhei no arquivo hosts e havia uma input aleatória lá para o github. Remover o alias resolveu o problema

    % systemroot% \ system32 \ drivers \ etc \ hosts

    Eu simplesmente desativei a autenticação do certificado SSL e usei o login de senha do nome de usuário simples como mostrado abaixo insira a descrição da imagem aqui

    Eu precisava dos certificados apenas para o Cygwin e o git, então eu fiz o que @esquifit postou. No entanto, eu tive que executar o passo 5 manualmente, c_rehash não estava disponível no meu sistema. Eu segui este guia: Instalando Certificados de AC na estrutura do OpenSSL .

    Eu precisava de duas coisas:

    1. vá para a configuração do cygwin e inclua o pacote ‘ ca-certificates ‘ (está sob Net) (como indicado em outro lugar).

    2. Diga ao git onde encontrar os certificados instalados:

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

      (Opção detalhada não é necessária)

      Ou armazenar a opção permanentemente:

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

      git …

    Eu tive o mesmo problema. A importação ou o comando do certificado para cancelar a verificação SSL não funcionou. Acabou por ser senha expirada para o proxy de rede. Houve input de configuração de proxy. no arquivo .gitconfig presente no perfil de usuário do meu windows. Acabei de remover toda a input e ela começou a funcionar novamente.

    Em um sistema Mac OSX 10.5, consegui fazer isso funcionar com um método simples. Primeiro, execute os procedimentos do github e o teste, que funcionou bem para mim, mostrando que meu certificado estava realmente correto. https://help.github.com/articles/generating-ssh-keys

     ssh -T git@github.com 

    Então eu finalmente notei ainda outro formato de URL para controles remotos. Eu tentei os outros, acima e eles não funcionaram. http://git-scm.com/book/ch2-5.html

     git@github.com:MyGithubUsername/MyRepoName.git 

    Um simples “git push myRemoteName” funcionou muito bem!

    Eu recentemente (julho de 2014) tive um problema semelhante e descobri no OS X (10.9.4) que havia um certificado de “CA de Raiz de EV de Alta Garantia DigiCert” expirado (embora eu também tivesse outro não expirado).

    1. Abra o access às chaves
    2. pesquisa Certificados para “DigiCert”
    3. Menu Exibir> Mostrar certificados expirados

    Eu encontrei dois certificados chamados “DigiCert Alta Assurance EV Root CA”, um com vencimento em novembro de 2031 e o expirado em julho de 2014 (alguns dias antes). A exclusão do certificado expirado resolveu o problema para mim.

    Espero que isto ajude.

    Para aqueles que usam o Msys / MinGW GIT, adicione isto

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