adicionando certificado SSL apenas ao Github (nem todos os certificados do pacote ca-certificates)

13

Recebo o seguinte erro ao acessar o Github por HTTPS:

error: server certificate verification failed. 
CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none

Isso ocorre porque eu não tenho nenhum certificado /etc/ssl/certs/. Eu sei como resolver esse problema. Eu posso instalar o pacote ca-certificatesno repositório Debian. O problema é, no entanto, que isso instalará todos os certificados (milhares) nos quais eu não necessariamente quero aceitar / confiar.

Como posso instalar o certificado apenas para o Github?

a Subproblema / Subquestion

Em outra máquina, onde o pacote ca-certificatesjá está instalado e o git funciona, notei que alguns certificados /etc/ssl/certs/são um certificado por arquivo e outros são muitos certificados em um arquivo. O arquivo específico que contém o certificado Github /etc/ssl/certs/ca-certificates.crtcontém mais de 150 outros certificados:

$ grep 'BEGIN CERTIFICATE' /etc/ssl/certs/ca-certificates.crt | wc -l
159

Como posso encontrar qual desses 159 certificados é o que eu preciso? (exceto força bruta - corte o arquivo pela metade e verifique as duas metades, repetindo while n > 1).

Martin Vegter
fonte
O que você está tentando realizar? Entrando em contato com o GitHub programaticamente?
Nate W.
Você já tentou baixar o pacote de origem e depois extrair apenas o certificado que deseja?
Jayhendren
O que você está usando para acessar o github? alguma ferramenta de linha de comando? um navegador?
lk- 25/05

Respostas:

13

Para acessar seu Github, você precisa fazê-lo via ssh. Então você precisa adicionar sua chave pública ssh ao github. Depois disso, você poderá acessar o github via ssh, ou seja:

git init [email protected]:yourname/yourrepo.git

Veja também: Github: gerando chaves ssh , WikiHow

[Editar # 1]

sem verificações de certificado:

GIT_SSL_NO_VERIFY=true git clone https://github.com/p/repo.git

ou autenticado

GIT_SSL_NO_VERIFY=true git clone https://user@pass:github.com/p/repo.git

Para mim, ainda não está claro o que você está pedindo, porque você sabe que a instalação de certificados CA corrigirá o problema.

[Editar # 2]

Ok, a outra pergunta foi

como ter apenas o certificado necessário para acessar o github.com via https

  1. Abra seu navegador e navegue para https://github.com/ . Clique no nome verde à esquerda https://e clique em Certificates. Na Detailsguia, você verá a cadeia de certificados, que é:

    DigiCert ...
      DigiCert ...
       github.com ...
    
  2. Exporte cada um dos certicates DigiCert para um arquivo.

  3. copie os arquivos para /etc/ssl/certs/
  4. executar c_rehashqual gato todos os certificados paraca-certificates.crt
  5. você terminou.

Como eu disse, não sou amigo de tais ações porque o github pode alterar os CAs a qualquer momento, portanto sempre resultará em trabalho adicional.


fonte
1
Obrigado pela sugestão. Mas eu gostaria de acessar githubvia https.
Martin Vegter 23/05
1

Como foi sugerido anteriormente, você pode usar chaves SSH, em vez de confiar no HTTPS para evitar esse problema e, sem dúvida, aproveitar melhor a segurança.

Dito isto, acho que o que você está procurando é como instalar certificados raiz / CA em / etc / ssl / certs. Em poucas palavras, não basta despejar o arquivo codificado em PEM em / etc / ssl / certs - você também precisa calcular o hash do referido certificado e criar um link simbólico em / etc / ssl / certs para esse certificado Arquivo. O nome do link simbólico deve ser o hash com o sufixo .0 ou, se houver uma colisão de hash, .1 e assim por diante.

Aqui está uma descrição detalhada, bem como um exemplo de script que você pode usar para automatizar o processo: http://wiki.openwrt.org/doc/howto/wget-ssl-certs#adding.root.certificates

Espero que seja isso que você estava procurando, mas como eu disse anteriormente, as chaves SSH são provavelmente a solução "melhor". :)

Rouben Tchakhmakhtchian
fonte
c_rehashestá fazendo o que você explicou. Veja a c_rehashpágina de manual. BTW: não há necessidade de calcular os hashes. A transmissão de certificados para ca-certificates.crt é suficiente, pois gitlê apenas esse arquivo. Além disso, o link explicou como obter manualmente os certificados com o openssl. Isso é muito duvidoso e provoca um homem no meio do ataque. Eu não recomendaria.