Como instalar certificados para linha de comando

72

Portanto, 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 pusheu recebo:

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 poder se autenticar para mim. Além disso, é um .cerarquivo, portanto, a resposta para .crtnão funcionará. Além disso, não quero etapas sobre como configurar o git, como já tenho. Eu quero saber se é possível fazer isso. Ou posso simplesmente desativar gittotalmente a autenticação com o comando e fazer com que ele ignore certificados como o que a resposta aqui diz? Além disso, não quero que a página seja carregada, configurei o firefox para fazer isso. Eu quero que o git pushcomando dê 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: Eu descobri o seu git config --global http.sslverify false. Mas eu gostaria de ver uma resposta para tudo, não apenas um truque

Eletricidade Universal
fonte
2
possível duplicata de Como instalar um certificado raiz?
Eric Carvalho
@ EricCarvalho não, isso é para .crt. Eu preciso.cer
Universal Electricity
Você tem algum problema com o seu comando git ou o que deseja fazer? Dê-me um ping com @AB
AB
@AB Quero permitir que o git use o certificado que a escola nos fornece, em vez de tentar usar o certificado do github. Ou se isso não funcionar, então permitir que cert da escola para autenticar para mim
Universal Eletricidade
Observe que as extensões .crt e .cer são intercambiáveis, basta alterar a extensão do nome do arquivo, elas têm a mesma forma.
Mike

Respostas:

118

TL; DR

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

No ubuntu:

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

Por quê

Deixe-me explicar o que está acontecendo também, para que os outros pôsteres vejam por que eles não precisam de nenhum certificado para usar o Github sobre HTTPS.

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

Para fazer isso, o que eles fazem é essencialmente um ataque "intermediário" e, por causa disso, seu navegador reclama que ele não está sendo capaz de verificar o certificado do github. O proxy da sua escola está tirando o certificado do github e fornecendo seu próprio certificado.

Quando o navegador tenta verificar o certificado fornecido pela escola em relação à autoridade de certificação que assinou o certificado do github, ele falha corretamente.

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

Quando você confia na autoridade de certificação da escola, sua verificação do certificado falso do github funcionará, pois o certificado falso do github será verificado pela autoridade de certificação da escola.

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

Telegrafista
fonte
Esta é essencialmente a mesma resposta que a de Mike sem o dpkg-reconfigure que não deveria ser necessário. O que pode estar acontecendo é que o git ou outra linha de comando não está sendo 100% padrão em relação à verificação SSL. Pode ser necessário usar o que você chama de "git hack" para solucionar o "hack SSL" que sua escola implementou primeiro.
Telegrapher
Além disso, esteja ciente de que você precisa de permissões de root para executar esses comandos, para que o comando sudo precise ser bem-sucedido ou você não poderá atualizar as Autoridades de Certificação do sistema.
Telegrapher
2
Por favor edite sua resposta para fornecer os fatos adicionais - não deixe o em um comentário.
guntbert
11
Eu acredito que deveria ser /usr/local/share/ca-certificates/. Veja man update-ca-certificates, que fala sobre a existência de uma lista de permissões, /usr/share/ca-certificates/mas sobre como ela confia implicitamente em tudo no /usr/local/share/ca-certificates/diretório.
11266 Ian Hickson #
3
no Ubuntu 16.04 depois de adicionar a CA /usr/local/share/ca-certificates, tive que usá sudo dpkg-reconfigure ca-certificates-la para pegar a CA.
Matt L.
41

O ca-certificatespacote possui as instruções em README.Debian:

Se você deseja instalar autoridades de certificação locais a ser implicitamente confiável, por favor coloque os arquivos de certificado como arquivos individuais que terminam com .crtem /usr/local/share/ca-certificates/e re-run update-ca-certificates.

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

/usr/local/share/ca-certificates/

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

Robert Siemer
fonte
4
Isso funcionou para mim também no Ubuntu 16.04. O caminho na resposta aceita não funcionou para mim.
Plazgoth
Esta deve ser uma resposta aceita. Esta é uma solução funcional para o servidor Ubuntu 16.04 LTS.
Lasitha Benaragama 27/11
15

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

$ 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
Mike
fonte
Bem, embora isso seja verdade, não ajudou. Mas, no futuro, pode ajudar as pessoas
Universal Eletricidade
Adicionei mais uma linha, tente fazer o git confiar no seu certificado, note que mudei cer. .pem em duas das 4 etapas .crt. @Unicorns Are Very Very Yummy
Mike
3
Se o seu arquivo .CER é binário (formato DER), você não pode simplesmente mudar a extensão. Use openssl(1)para converter o certificado para o formato PEM. Execute:$ openssl -in mycert.cer -inform DER -out mycert.pem -outform PEM
Arch user
11
@Archuser Talvez o comando certo seja este:openssl x509 -inform DER -in certificate.cer -out certificate.pem
artificerpi
5

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 de uma linha.

Geralmente ambos site.example.come example.comsão os mesmos nomes de host.

Orientar
fonte
3

Eu li todas as soluções e resolvi assim;

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

sudo mv certificate.crt /usr/share/ca-certificate/

cd /usr/share/ca-certificate

sudo chmod 644 certificate.crt

sudo dpkg-reconfigure ca-certificates

sudo update-ca-certificates
Kadir Y.
fonte
1

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

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

Ainda assim, sudo dpkg-reconfigure ca-certificatesnã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 eu estava copiando em $/usr/local/share/ca-certificates Mas, colocando-o no lugar certo, resolvi o meu problema. Mas ainda não consigo atualizar os pacotes ou instalar novos pacotes.

Soluçã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

e o comando acima funcionou. Faça uma cópia do arquivo sources.list antes de fazer as alterações.

Se algo não estiver claro ou não for adequado, corrija-me.

Gopal Sharma
fonte
0

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

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

Mais informações aqui . Mude seu perfil do GitHub aqui .


Tente o seguinte:

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

... funciona sem um certificado adicional.

AB
fonte