Como instalar certificados para linha de comando

27

Então, na escola, precisamos instalar um certificado para acessar sites https. No firefox, posso importar o certificado. No entanto, não posso fazer isso com a linha de comando. Por exemplo, executando git push , obtenho:

fatal: unable to access 'https://github.com/user/repo': server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none

Como importo um certificado para remover isso? A importação deve ser capaz de autenticar para mim. Além disso, é um arquivo .cer , portanto, a resposta para .crt não funcionará. Além disso, eu não quero passos sobre como configurar o git, como eu já tenho. Eu quero saber se é possível fazer isso. Ou posso simplesmente desabilitar a autenticação com o comando git totalmente e fazê-lo ignorar certificados como o que a resposta aqui diz? Além disso, eu não quero que a página carregue, eu configurei o firefox para fazer isso. Eu quero o comando git push para dar a saída padrão como:

[master 630d087] message
 1 file changed, 93 insertions(+), 80 deletions(-)
 rewrite somefile (84%)
Counting objects: 9, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (5/5), 978 bytes | 0 bytes/s, done.
Total 5 (delta 2), reused 0 (delta 0)
To https://github.com/User/Repo.git
   851ae39..630d087  master -> master

Nota: descobri o seu git config --global http.sslverify false . Mas eu gostaria de ver uma resposta para tudo, não apenas um git hack

    
por Universal Electricity 08.07.2015 / 10:16

6 respostas

45

TL; DR

Para que tudo funcione e não apenas o seu navegador, você precisa adicionar esse certificado de CA ao repositório de autoridades de certificação confiáveis do sistema.

No Ubuntu:

  • Vá para / usr / local / share / ca-certificates /
  • Crie uma nova pasta, por exemplo, "sudo mkdir school"
  • Copie o arquivo .crt para a pasta da escola
  • Verifique se as permissões estão corretas (755 para a pasta, 644 para o arquivo)
  • Execute "sudo update-ca-certificates"

Por que

Deixe-me explicar o que está acontecendo também, então os outros pôsteres vêem porque não precisam de nenhum certificado para usar o Github em HTTPS.

O que está acontecendo é que sua escola está interceptando todas as comunicações SSL, provavelmente para monitorá-las.

Para fazer isso, o que eles fazem é essencialmente um ataque "man in the middle", e por causa disso, seu navegador reclama com razão que ele não está conseguindo verificar o certificado do github. Seu proxy da escola está retirando o certificado do github e fornecendo seu próprio certificado.

Quando o seu navegador tenta verificar o certificado fornecido pela escola contra a CA que assinou o certificado do github, ele certamente falha.

Portanto, para que a conexão SSL funcione na escola, você precisa aceitar conscientemente o ataque "MITM". E você faz isso adicionando o certificado de CA da escola como confiável.

Quando você confia na CA da escola, a verificação do certificado falso do github funcionará, pois o certificado github falso será verificado pela CA da escola.

Saiba que a conexão SSL não é mais segura, pois o administrador da sua escola poderá interceptar todas as suas conexões criptografadas.

    
por Telegrapher 17.07.2015 / 12:00
30

O pacote ca-certificates tem as instruções em README.Debian :

  

Se você deseja instalar autoridades de certificação locais para ser implicitamente confiáveis, coloque os arquivos de certificado como arquivos únicos que terminam com .crt em /usr/local/share/ca-certificates/ e execute novamente    update-ca-certificates .

Note que menciona um diretório diferente das outras respostas aqui:

/usr/local/share/ca-certificates/

Depois de copiar em /usr/local/share/ca-certificates/ , você pode atualizar as permissões do certificado e executar sudo update-ca-certificates , conforme mencionado na resposta dos Telegrafistas. Você verá na saída que o certificado foi adicionado.

    
por Robert Siemer 12.12.2016 / 16:47
12

As extensões .crt, .pem e .cer são intercambiáveis, basta alterar a extensão do nome do arquivo, elas têm o mesmo formato. Tente isto:

$ sudo cp mycert.cer /usr/share/ca-certificates/mycert.pem
$ sudo dpkg-reconfigure ca-certificates
$ sudo update-ca-certificates
$ git config --global http.sslCAInfo /usr/share/ca-certificates/mycert.pem
    
por Mike 15.07.2015 / 11:21
1

Eu uso a seguinte compilação de respostas anteriores:

sudo -i
echo | openssl s_client -showcerts -servername site.example.com -connect example.com:443 2>/dev/null | awk '/-----BEGIN CERTIFICATE-----/, /-----END CERTIFICATE-----/' >> /usr/local/share/ca-certificates/ca-certificates.crt 
update-ca-certificates

Pode ser modificado para ser one-liner.

Geralmente, os dois site.example.com e example.com são os mesmos nomes de host.

    
por Orient 24.11.2017 / 12:37
0

Para acessar um site com https , se você estiver usando um navegador CLI ou GUI, não será necessário o certificado do seu shool.

Para usar git via http (s), você precisa registrar sua chave pública nas configurações do seu perfil no GitHub .

Mais informações aqui . Mude o seu perfil no GitHub aqui .

Tente isto:

sudo apt-get install w3m
w3m https://github.com/

… funciona sem um certificado adicional.

    
por A.B. 15.07.2015 / 10:55
0

Eu estava tendo um problema semelhante ao instalar o certificado no firefox e o google chrome, mas a atualização no terminal sudo apt-get update não estava funcionando e deu 403 erros de IP proibido. Eu também estava tendo um arquivo sample.cer. Então basicamente eu tenho que convertê-lo para .crt primeiro.

sudo openssl x509 -inform DER -in sample.cer -out sample.crt

Ainda durante a execução de sudo dpkg-reconfigure ca-certificates , não consegui encontrar o certificado necessário. O problema comigo é que eu estava copiando o certificado no lugar errado.

Em vez de copiá-lo em $/usr/share/ca-certificates , copiei-o em $/usr/local/share/ca-certificates Mas, colocando-o no lugar certo, resolveu meu problema. Mas ainda não consigo atualizar os pacotes ou instalar novos pacotes.

Correção rápida (para mim):

Uso de ftp em vez de http

sudo sed -i s/http/ftp/ /etc/apt/sources.list && apt-get update
O comando

e acima funcionou. Por favor, faça uma cópia do arquivo sources.list antes de fazer as alterações.

Se alguma coisa não estiver clara ou errada, por favor, corrija-me.

    
por Gopal Sharma 05.06.2018 / 15:11