Come installare i certificati per la riga di comando


72

Quindi a scuola dobbiamo installare un certificato per accedere ai siti https. In Firefox, posso importare il certificato. Tuttavia, non posso farlo con la riga di comando. Ad esempio, correndo git pushottengo:

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

Come importare un certificato per rimuoverlo? L'importazione deve essere in grado di autenticare per me. Inoltre, è un .cerfile, quindi la risposta per .crtnon funzionerà. Inoltre, non voglio passaggi su come configurare git, come ho già fatto. Voglio sapere se è possibile farlo. O posso semplicemente disabilitare completamente l'autenticazione con il gitcomando e farlo ignorare i certificati come quello che dice la risposta qui? Inoltre, non voglio caricare la pagina Web, ho impostato Firefox per farlo. Voglio che il git pushcomando dia l'output standard come:

[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: ho scoperto che è git config --global http.sslverify false. Ma vorrei vedere una risposta per tutto, non solo un hack git



@EricCarvalho no, questo è tutto .crt. Ho bisogno di.cer
elettricità universale il

Hai un problema con il tuo comando git o cosa vuoi fare? Fammi un rumore metallico con @AB
AB il

@AB Voglio consentire a git di utilizzare il certificato che la scuola ci fornisce, invece di provare a usare github cert. O se non funziona, consenti all'autorizzazione della scuola di autenticarmi per me
Universal Electricity,

Si noti che le estensioni .crt e .cer sono intercambiabili, basta cambiare l'estensione del nome file, hanno la stessa forma.
Mike,

Risposte:


118

TL; DR

Perché tutto funzioni e non solo il browser, è necessario aggiungere quel certificato CA al repository CA attendibile del sistema.

In Ubuntu:

  • Vai a / usr / local / share / ca-certificati /
  • Crea una nuova cartella, ad esempio "sudo mkdir school"
  • Copia il file .crt nella cartella della scuola
  • Assicurarsi che le autorizzazioni siano OK (755 per la cartella, 644 per il file)
  • Esegui "sudo update-ca-certificati"

Perché

Vorrei anche spiegare cosa sta succedendo, quindi gli altri poster vedono perché non hanno bisogno di alcun certificato per usare Github su HTTPS.

Quello che sta succedendo è che la tua scuola sta intercettando tutte le comunicazioni SSL, probabilmente per monitorarle.

Per fare ciò, ciò che fanno è in sostanza un attacco "man in the middle", e per questo motivo, il tuo browser si lamenta giustamente che non è in grado di verificare il certificato di Github. Il tuo delegato scolastico sta eliminando il certificato di Github e fornendo invece il proprio certificato.

Quando il tuo browser tenta di verificare il certificato fornito dalla scuola contro la CA che ha firmato il certificato di Github, giustamente fallisce.

Quindi, affinché la connessione SSL funzioni nella scuola, è necessario accettare consapevolmente quell'attacco "MITM". E lo fai aggiungendo il certificato CA della scuola come certificato attendibile.

Quando ti fidi di quella CA della scuola, la tua verifica del certificato github falso funzionerà, poiché il certificato github falso verrà verificato dalla CA della scuola.

Tieni presente che la connessione SSL non è più sicura poiché l'amministratore della tua scuola sarà in grado di intercettare tutte le tue connessioni crittografate.


Questa è essenzialmente la stessa risposta di Mike senza la riconfigurazione di dpkg che non dovrebbe essere necessaria. Quello che potrebbe succedere è che git o un'altra riga di comando non siano standard al 100% per quanto riguarda la loro verifica SSL. Potrebbe essere necessario usare quello che chiami "hack git" per aggirare "l'hack SSL" implementato per prima dalla tua scuola.
Telegrapher,

Inoltre, tieni presente che hai bisogno delle autorizzazioni di root per eseguire questi comandi, quindi il comando sudo deve avere successo, altrimenti non sarai in grado di aggiornare le autorità di certificazione del sistema.
Telegrapher,

2
Si prega di modificare la risposta di fornire i fatti aggiuntivi - non lasciare la in un commento.
Guntbert,

1
Credo che dovrebbe essere /usr/local/share/ca-certificates/. Vedi man update-ca-certificates, che parla dell'esistenza di una whitelist /usr/share/ca-certificates/ma di come si fida implicitamente di tutto nella /usr/local/share/ca-certificates/directory.
Ian Hickson,

3
su Ubuntu 16.04 dopo aver aggiunto la CA a cui /usr/local/share/ca-certificatesho dovuto utilizzare sudo dpkg-reconfigure ca-certificatesper ritirare la CA.
Matt L.

41

Il ca-certificatespacchetto ha le istruzioni nel suo README.Debian:

Se si desidera installare le autorità di certificazione locali in modo implicitamente attendibile, inserire i file del certificato come singoli file che terminano con .crtin /usr/local/share/ca-certificates/ed eseguono nuovamente update-ca-certificates.

Nota che menziona una directory diversa dalle altre risposte qui:

/usr/local/share/ca-certificates/

Dopo aver effettuato la copia, /usr/local/share/ca-certificates/è possibile aggiornare le autorizzazioni del certificato ed eseguire sudo update-ca-certificatescome indicato nella risposta Telegraphers. Vedrai nell'output che il certificato è stato aggiunto.


4
Questo ha funzionato anche per me su Ubuntu 16.04. Il percorso nella risposta accettata non ha funzionato per me.
Plazgoth,

Questa deve essere una risposta accettata, questa è una soluzione funzionante per Ubuntu Server 16.04 LTS.
Lasitha Benaragama,

15

Le estensioni .crt, .pem e .cer sono intercambiabili, basta cambiare l'estensione del nome file, hanno la stessa forma. Prova questo:

$ 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

Bene, anche se questo è vero, non ha aiutato. Ma in futuro potrebbe aiutare le persone
Universal Electricity,

Ho aggiunto un'altra riga, provalo per fidarti del tuo certificato, nota che ho cambiato cer. .pem in due dei 4 passaggi invece .crt. @Unicorns Are Very Very Yummy
Mike,

3
Se il tuo file .CER è binario (formato DER), non puoi semplicemente modificare l'estensione. Utilizzare openssl(1)per convertire il certificato in formato PEM. Esegui:$ openssl -in mycert.cer -inform DER -out mycert.pem -outform PEM
Arch user il

1
@Archuser Forse il comando giusto è questo:openssl x509 -inform DER -in certificate.cer -out certificate.pem
artificerpi il

5

Uso la seguente raccolta di risposte precedenti:

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

Può essere modificato per essere a linea singola.

Spesso entrambi site.example.come example.comsono gli stessi nomi host.


3

Ho letto tutte le soluzioni e risolto in questo modo;

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

1

Stavo riscontrando un problema simile in cui l'installazione del certificato in Firefox e Google Chrome funzionava, ma l'aggiornamento nel terminale sudo apt-get updatenon funzionava e forniva 403 errori IP Proibiti. Avevo anche un file sample.cer. Quindi in pratica devo prima convertirlo in .crt.

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

Ancora facendo sudo dpkg-reconfigure ca-certificatesnon sono riuscito a trovare il certificato richiesto. Il problema con me è che stavo copiando il certificato nel posto sbagliato.

Invece di copiarlo, lo $/usr/share/ca-certificates stavo copiando, $/usr/local/share/ca-certificates ma posizionandolo nel posto giusto ho risolto il mio problema. Ma non sono ancora in grado di aggiornare i pacchetti o installare nuovi pacchetti.

Correzione rapida (per me su):

Utilizzo di ftp anziché http

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

e sopra il comando ha funzionato. Effettuare una copia del file sources.list prima di apportare le modifiche.

Se qualcosa non è chiaro o non corretto, per favore correggimi.


0

Per accedere a un sito Web con https, sia che si utilizzi un browser CLI o GUI, non è necessario il certificato shool.

Per utilizzare gittramite http (s) è necessario registrare la chiave pubblica nelle impostazioni del profilo su GitHub .

Altre informazioni qui . Cambia qui il tuo profilo GitHub .


Prova questo:

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

... funziona senza un certificato aggiuntivo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.