Jak zainstalować certyfikaty dla wiersza poleceń

71

Tak więc w szkole musimy zainstalować certyfikat, aby uzyskać dostęp do stron https. W Firefoksie mogę zaimportować certyfikat. Nie mogę tego jednak zrobić za pomocą wiersza polecenia. Na przykład po uruchomieniu git pushotrzymuję:

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

Jak zaimportować certyfikat, aby go usunąć? Import musi być dla mnie uwierzytelniony. Jest to również .cerplik, więc odpowiedź na .crtnie zadziała. Nie chcę też kroków, jak skonfigurować git, jak już to zrobiłem. Chcę wiedzieć, czy można to zrobić. Czy mogę po prostu gitcałkowicie wyłączyć uwierzytelnianie za pomocą polecenia i sprawić, że będzie ono ignorować certyfikaty, tak jak w przypadku odpowiedzi tutaj? Nie chcę też, aby strona ładowała się, ustawiłem firefox, aby to zrobić. Chcę, aby git pushpolecenie podało standardowe dane wyjściowe, takie jak:

[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

Uwaga: dowiedziałem się git config --global http.sslverify false. Ale chciałbym zobaczyć odpowiedź na wszystko, nie tylko na hack

Universal Electricity
źródło
2
możliwy duplikat Jak zainstalować certyfikat główny?
Eric Carvalho,
@EricCarvalho nie, to znaczy .crt. Potrzebuję.cer
Universal Electricity,
Masz problem ze swoim poleceniem git lub co chcesz zrobić? Daj mi ping z @AB
AB
@AB Chcę pozwolić gitowi na używanie certyfikatu, który daje nam szkoła, zamiast próbować używać certyfikatu github. A jeśli to nie zadziała, pozwól, aby certyfikat szkoły uwierzytelnił się dla mnie
Universal Electricity
Zauważ, że rozszerzenia .crt i .cer są wymienne, wystarczy zmienić rozszerzenie nazwy pliku, mają tę samą formę.
Mike

Odpowiedzi:

116

TL; DR

Aby wszystko działało, a nie tylko przeglądarka, musisz dodać ten certyfikat CA do zaufanego repozytorium CA systemu.

W ubuntu:

  • Przejdź do / usr / local / share / ca-certyfikaty /
  • Utwórz nowy folder, tj. „Sudo mkdir school”
  • Skopiuj plik .crt do folderu szkolnego
  • Upewnij się, że uprawnienia są prawidłowe (755 dla folderu, 644 dla pliku)
  • Uruchom „sudo update-ca-certyfikaty”

Dlaczego

Pozwól mi wyjaśnić, co się dzieje, aby inni plakaty zrozumieli, dlaczego nie potrzebują żadnego certyfikatu, aby korzystać z Github przez HTTPS.

To, co się tam dzieje, polega na tym, że twoja szkoła przechwytuje całą komunikację SSL, prawdopodobnie w celu ich monitorowania.

Aby to zrobić, to w istocie atak typu „człowiek w środku”, dlatego przeglądarka słusznie narzeka, że ​​nie jest w stanie zweryfikować certyfikatu github. Twój szkolny pełnomocnik wyciąga certyfikat github i zamiast tego wydaje własny certyfikat.

Gdy przeglądarka próbuje zweryfikować certyfikat szkoły dostarczony przez urząd certyfikacji, który podpisał certyfikat github, nie udaje się to.

Aby połączenie SSL działało w szkole, musisz świadomie zaakceptować atak „MITM”. Robisz to, dodając szkolny certyfikat CA jako zaufany.

Gdy zaufasz temu szkolnemu urzędowi certyfikacji, weryfikacja fałszywego certyfikatu github będzie działać, ponieważ fałszywy certyfikat certyfikatu github zostanie zweryfikowany przez szkolny urząd certyfikacji.

Należy pamiętać, że połączenie SSL nie jest już bezpieczne, ponieważ administrator szkoły będzie w stanie przechwycić wszystkie zaszyfrowane połączenia.

Telegrapher
źródło
Jest to w zasadzie ta sama odpowiedź, co odpowiedź Mike'a bez rekonfiguracji dpkg, która nie powinna być potrzebna. To, co może się dziać, to to, że git lub inna linia poleceń nie jest w 100% standardowa pod względem weryfikacji SSL. Używanie tego, co nazywasz „hackiem git”, może być konieczne, aby obejść „hack SSL”, który Twoja szkoła wdrożyła jako pierwsza.
Telegrapher,
Ponadto należy pamiętać, że do uruchomienia tych poleceń potrzebne są uprawnienia roota, dlatego polecenie sudo musi zakończyć się powodzeniem, w przeciwnym razie nie będzie można zaktualizować urzędów certyfikacji systemu.
Telegrapher,
2
Proszę edytować swoje odpowiedzi, aby zapewnić dodatkowe fakty - nie pozostawić w komentarzu.
guntbert
1
Wierzę, że tak powinno być /usr/local/share/ca-certificates/. Zobacz man update-ca-certificates, która mówi o istnieniu białej listy, /usr/share/ca-certificates/ale o tym, jak domyślnie ufa wszystkim w /usr/local/share/ca-certificates/katalogu.
Ian Hickson,
3
na Ubuntu 16.04 po dodaniu urzędu certyfikacji do /usr/local/share/ca-certificatesmusiałem użyć sudo dpkg-reconfigure ca-certificatesgo do odebrania urzędu certyfikacji.
Matt L.,
40

ca-certificatesPakiet ma w swojej instrukcji README.Debian:

Jeśli chcesz zainstalować lokalne władze certyfikatów być zaufany niejawnie, należy umieścić pliki certyfikatów jako pojedyncze pliki kończące się .crtINTO /usr/local/share/ca-certificates/i ponownego uruchomienia update-ca-certificates.

Zauważ, że wspomina o katalogu innym niż pozostałe odpowiedzi tutaj:

/usr/local/share/ca-certificates/

Po skopiowaniu do /usr/local/share/ca-certificates/możesz następnie zaktualizować uprawnienia certyfikatu i uruchomić sudo update-ca-certificateszgodnie z opisem w odpowiedzi Telegraphers. W danych wyjściowych zobaczysz, że certyfikat został dodany.

Robert Siemer
źródło
4
Działa to również dla mnie w Ubuntu 16.04. Ścieżka w zaakceptowanej odpowiedzi nie działała dla mnie.
Plazgoth,
To musi być zaakceptowana odpowiedź, jest to działające rozwiązanie dla serwera Ubuntu 16.04 LTS.
Lasitha Benaragama
15

Rozszerzenia .crt, .pem i .cer są wymienne, wystarczy zmienić rozszerzenie nazwy pliku, mają tę samą formę. Spróbuj tego:

$ 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
Mikrofon
źródło
Cóż, chociaż to prawda, to nie pomogło. Ale w przyszłości może to pomóc ludziom
Universal Electricity
Dodałem jeszcze jedną linię, spróbuj, aby git zaufał twojemu certyfikatowi, zauważ, że zmieniłem cer. na .pem zamiast dwóch z 4 kroków .crt. @Unicorns are Very Very Yummy
Mike
3
Jeśli plik .CER jest binarny (format DER), nie możesz po prostu zmienić rozszerzenia. Służy openssl(1)do konwersji certyfikatu do formatu PEM. Uruchom:$ openssl -in mycert.cer -inform DER -out mycert.pem -outform PEM
Arch użytkownik
1
@Archuser Być może właściwym poleceniem jest:openssl x509 -inform DER -in certificate.cer -out certificate.pem
artificerpi
5

Korzystam z następującej kompilacji poprzednich odpowiedzi:

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

Można go zmodyfikować, aby był jednowarstwowy.

Często obie site.example.comi example.comsą te same nazwy hostów.

Orient
źródło
3

Przeczytałem wszystkie rozwiązania i tak rozwiązałem;

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.
źródło
1

Miałem podobny problem, gdy instalacja certyfikatu w Firefoxie i Google Chrome działała, ale aktualizacja w terminalu sudo apt-get updatenie działała i powodowała błędy 403 zabronionego adresu IP. Ja też miałem plik sample.cer. Zasadniczo najpierw muszę go przekonwertować na .crt.

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

Wciąż sudo dpkg-reconfigure ca-certificatesnie mogłem znaleźć wymaganego certyfikatu. Problem ze mną polega na tym, że kopiowałem certyfikat w niewłaściwym miejscu.

Zamiast kopiować w $/usr/share/ca-certificates , kopiowałem w, $/usr/local/share/ca-certificates ale umieszczenie go w odpowiednim miejscu rozwiązało mój problem. Ale nadal nie mogę zaktualizować pakietów ani zainstalować nowych pakietów.

Szybka poprawka (dla mnie na):

Użycie ftp zamiast http

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

i powyżej polecenia działało. Zrób kopię pliku sources.list przed dokonaniem zmian.

Jeśli coś jest niejasne lub niewłaściwe, proszę mnie poprawić.

Gopal Sharma
źródło
0

Aby uzyskać dostęp do strony internetowej https, bez względu na to, czy używasz przeglądarki CLI, czy GUI, nie potrzebujesz certyfikatu shool.

Aby korzystać gitz http (s), musisz zarejestrować swój klucz publiczny w ustawieniach profilu na GitHub .

Więcej informacji tutaj . Zmień swój profil GitHub tutaj .


Spróbuj tego:

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

… Działa bez dodatkowego certyfikatu.

AB
źródło