Comment installer des certificats pour la ligne de commande

72

Donc, à l'école, nous devons installer un certificat pour accéder aux sites https. Dans Firefox, je peux importer le certificat. Cependant, je ne peux pas le faire avec la ligne de commande. Par exemple, en cours d'exécution, git pushje reçois:

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

Comment importer un certificat pour le supprimer? L'import doit pouvoir s'authentifier pour moi. En outre, il s’agit d’un .cerfichier, la réponse .crtne fonctionnera donc pas. En outre, je ne veux pas d'étapes sur la façon de configurer git, comme je l'ai déjà fait. Je veux savoir s'il est possible de le faire. Ou puis-je simplement désactiver gitcomplètement l' authentification avec la commande et lui faire ignorer les certificats, comme le dit la réponse ? De plus, je ne veux pas que la page Web se charge, j'ai configuré Firefox pour le faire. Je veux que la git pushcommande donne la sortie standard comme:

[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

Note: j'ai découvert sa git config --global http.sslverify false. Mais je voudrais voir une réponse à tout, pas seulement un git hack

Électricité universelle
la source
2
duplication possible de Comment installer un certificat racine?
Eric Carvalho
@ EricCarvalho non, c'est pour .crt. J'ai besoin de.cer
Universal Electricity
Avez-vous un problème avec votre commande git ou ce que vous voulez faire? Donnez-moi un ping avec @AB
AB
@AB Je veux permettre à git d'utiliser le certificat que l'école nous a donné, au lieu d'essayer d'utiliser le github cert. Ou si cela ne fonctionne pas, permettez au certificat de l'école de s'authentifier pour moi
Universal Electricity
Notez que les extensions .crt et .cer sont interchangeables, il suffit de changer l'extension du nom de fichier, elles ont la même forme.
Mike

Réponses:

118

TL; DR

Pour que tout fonctionne, et pas seulement pour votre navigateur, vous devez ajouter ce certificat de CA au référentiel de CA approuvé du système.

À Ubuntu:

  • Allez à / usr / local / share / ca-certificates /
  • Créer un nouveau dossier, c.-à-d. "École sudo mkdir"
  • Copiez le fichier .crt dans le dossier de l'école
  • Assurez-vous que les autorisations sont correctes (755 pour le dossier, 644 pour le fichier)
  • Exécutez "sudo update-ca-certificates"

Pourquoi

Laissez-moi vous expliquer ce qui se passe également, afin que les autres afficheurs comprennent pourquoi ils n’ont pas besoin de certificat pour utiliser Github par rapport à HTTPS.

Ce qui se passe là-bas, c'est que votre école intercepte toutes les communications SSL, probablement pour les surveiller.

Pour faire cela, ce qu'ils font est essentiellement une attaque "homme au milieu", et à cause de cela, votre navigateur se plaint à juste titre qu'il n'est pas en mesure de vérifier le certificat de github. Votre proxy d'école prend le certificat de github et fournit son propre certificat.

Lorsque votre navigateur essaie de vérifier le certificat fourni par l'école par rapport à l'AC ayant signé le certificat de github, il échoue à juste titre.

Donc, pour que la connexion SSL fonctionne dans l'école, vous devez accepter consciemment cette attaque "MITM". Et vous le faites en ajoutant le certificat de l'autorité de certification de l'école.

Lorsque vous faites confiance à l'autorité de certification de votre école, votre vérification du faux certificat github fonctionnera, car ce certificat sera vérifié par l'autorité de certification de l'école.

Sachez que la connexion SSL n'est plus sûre, car votre administrateur d'école sera capable d'intercepter toutes vos connexions cryptées.

Télégraphiste
la source
Ceci est essentiellement la même réponse que celle de Mike sans la dpkg-reconfigure qui ne devrait pas être nécessaire. Il se peut que git ou une autre ligne de commande ne soit pas standard à 100% en ce qui concerne leur vérification SSL. Utiliser ce que vous appelez "git hack" peut être nécessaire pour contourner le "hack SSL" mis en œuvre par votre école en premier.
Télégraphe
De plus, sachez que vous devez disposer d'autorisations root pour exécuter cette commande. Par conséquent, la commande sudo doit réussir, sinon vous ne pourrez pas mettre à jour les autorités de certification du système.
Télégraphe
2
Veuillez modifier votre réponse pour fournir les faits supplémentaires - ne laissez pas de commentaire.
Guntbert
1
Je crois que cela devrait être /usr/local/share/ca-certificates/. Vous voyez man update-ca-certificates, il est question d'une liste blanche, /usr/share/ca-certificates/mais de la manière dont elle approuve implicitement tout ce qui se trouve dans l' /usr/local/share/ca-certificates/annuaire.
Ian Hickson
3
sur Ubuntu 16.04 après avoir ajouté le CA à, /usr/local/share/ca-certificatesje devais l’utiliser sudo dpkg-reconfigure ca-certificatespour le ramasser.
Matt L.
41

Le ca-certificatespaquet a les instructions dans son README.Debian:

Si vous souhaitez installer les autorités de certification locales de manière implicite, veuillez placer les fichiers de certificat sous forme de fichiers uniques se terminant par et .crtdans une /usr/local/share/ca-certificates/nouvelle exécution update-ca-certificates.

Notez qu'il mentionne un répertoire différent des autres réponses ici:

/usr/local/share/ca-certificates/

Après avoir copié dans, /usr/local/share/ca-certificates/vous pouvez alors mettre à jour les autorisations du cert et vous lancer sudo update-ca-certificatescomme indiqué dans la réponse de Telegraphers. Vous verrez dans la sortie que le certificat a été ajouté.

Robert Siemer
la source
4
Cela a fonctionné pour moi aussi sur Ubuntu 16.04. Le chemin dans la réponse acceptée ne fonctionnait pas pour moi.
Plazgoth
Cela doit être une réponse acceptée. C’est une solution efficace pour le serveur Ubuntu 16.04 LTS.
Lasitha Benaragama
15

Les extensions .crt, .pem et .cer sont interchangeables, il suffit de changer l'extension du nom de fichier, elles ont la même forme. Essaye ça:

$ 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
la source
Bien que cela soit vrai, cela n’a pas aidé. Mais à l'avenir, cela pourrait aider les gens
Universal Electricity
J'ai ajouté une ligne de plus, essayez de faire en sorte que git trust votre certificat, notez que j'ai changé de certificat. à .pem en deux des 4 étapes à la place de .crt. @Unicorns are Very Very Yummy
Mike
3
Si votre fichier .CER est binaire (format DER), vous ne pouvez pas simplement changer l'extension. Utilisez openssl(1)pour convertir le certificat au format PEM. Run:$ openssl -in mycert.cer -inform DER -out mycert.pem -outform PEM
Arch utilisateur
1
@Archuser Peut-être que la bonne commande est la suivante:openssl x509 -inform DER -in certificate.cer -out certificate.pem
artificerpi
5

J'utilise la compilation suivante des réponses précédentes:

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

Il peut être modifié pour être one-liner.

Souvent les deux site.example.comet example.comsont les mêmes noms d'hôtes.

Orient
la source
3

J'ai lu toutes les solutions et résolu comme ça;

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.
la source
1

J'avais un problème similaire où l'installation du certificat dans Firefox et Google Chrome fonctionnait, mais la mise à jour dans le terminal sudo apt-get updatene fonctionnait pas et donnait des erreurs 403 Forbidden IP. J'avais aussi un fichier sample.cer. Donc, fondamentalement, je dois d'abord le convertir en .crt.

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

Toujours tout en faisant , sudo dpkg-reconfigure ca-certificatesje ne pouvais pas trouver le certificat requis. Le problème avec moi, c'est que je copiais le certificat au mauvais endroit.

Au lieu de le copier à, $/usr/share/ca-certificates je le copiais à $/usr/local/share/ca-certificates Mais en le plaçant au bon endroit a résolu mon problème. Mais je ne suis toujours pas en mesure de mettre à jour les packages ou d'installer de nouveaux packages.

Solution rapide (pour moi sur):

Utilisation de ftp au lieu de http

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

et au-dessus de la commande a travaillé. Faites une copie du fichier sources.list avant d’apporter les modifications.

Si quelque chose n'est pas clair ou incorrect, corrigez-moi.

Gopal Sharma
la source
0

Pour accéder à un site Web avec https, que vous utilisiez une CLI ou un navigateur GUI, vous n'avez pas besoin de votre certificat shool.

Pour utiliser gitvia http (s), vous devez enregistrer votre clé publique dans les paramètres de votre profil sur GitHub .

Plus d'infos ici . Changez votre profil GitHub ici .


Essaye ça:

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

… Fonctionne sans certificat supplémentaire.

UN B
la source