Як встановити сертифікати для командного рядка


72

Тож у школі нам потрібно встановити сертифікат для доступу до https-сайтів. У Firefox я можу імпортувати сертифікат. Однак я не можу зробити це з командним рядком. Наприклад, бігаючи, git pushя отримую:

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

Як імпортувати сертифікат, щоб видалити це? Імпорт повинен бути в змозі для мене автентифікувати. Крім того, це .cerфайл, тому відповідь за .crtце не буде працювати. Крім того, я не хочу кроків щодо налаштування git, як я вже маю. Я хочу знати, чи можна це зробити. Або я можу просто відключити автентифікацію з gitкомандою і змусити її ігнорувати сертифікати, як сказано у відповіді ? Крім того, я не хочу завантажувати веб-сторінку, я встановив firefox для цього. Я хочу, щоб git pushкоманда давала стандартний вихід на зразок:

[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

Примітка: я дізнався його git config --global http.sslverify false. Але я хотів би побачити відповідь на все, а не лише на git hack



@EricCarvalho ні, це для .crt. Мені потрібно.cer
Universal Electricity

Чи є у вас проблеми з командою git або що ви хочете зробити? Дайте мені пінг з @AB
AB

@AB Я хочу дозволити git використовувати сертифікат, який нам надає школа, замість того, щоб намагатися використовувати github cert. Або якщо це не спрацює, тоді дозвольте сертифікату школи підтвердити автентифікацію для мене
Universal Electricity

Зауважте, що .crt і .cer розширення взаємозамінні, просто змініть розширення імені файлу, вони мають однакову форму.
Майк

Відповіді:


117

TL; DR

Щоб все працювало і не лише ваш браузер, вам потрібно додати цей сертифікат CA до надійного сховища системи системи.

У ubuntu:

  • Перейдіть на / usr / local / share / ca-сертифікати /
  • Створіть нову папку, тобто "sudo mkdir school"
  • Скопіюйте файл .crt у шкільну папку
  • Переконайтеся, що дозволи дозволені (755 для папки, 644 для файлу)
  • Запустити "sudo update-ca-сертифікати"

Чому?

Дозвольте мені пояснити, що відбувається також, тому інші афіші бачать, чому їм не потрібен сертифікат для використання Github через HTTPS.

Що там відбувається, це те, що ваша школа перехоплює всі комунікації SSL, ймовірно, для того, щоб контролювати їх.

Для цього те, що вони роблять, - це, по суті, атака "людина в середині", і через це ваш браузер справедливо скаржиться, що він не в змозі перевірити сертифікат github. Ваш шкільний проксі виймає certh github і натомість надає свою власну cert.

Коли ваш веб-переглядач намагається перевірити наданий школою сертифікат проти CA, який підписав certh github, він справедливо не працює.

Отже, для того, щоб з'єднання SSL працювало в школі, потрібно свідомо прийняти ту атаку "MITM". І ви робите це, додаючи сертифікат сертифіката школи як довірений.

Якщо ви довіряєте цьому шкільному адміністратору, ваша перевірка фальшивого цертву github спрацює, оскільки фальшива церта github буде перевірена шкільною службою CA.

Майте на увазі, що з'єднання SSL вже не є безпечним, оскільки адміністратор школи зможе перехопити всі ваші зашифровані з'єднання.


Це по суті та сама відповідь, що і Майк без перенастроювання dpkg, яка не повинна бути потрібною. Можливо, це те, що git чи інший командний рядок не є 100% стандартним щодо їх перевірки SSL. Використання того, що ви називаєте "git hack", можливо, знадобиться для того, щоб вирішити "SSL-хак", який ваша школа запровадила першою.
Телеграф

А також пам’ятайте, що для виконання цих команд вам потрібні кореневі дозволи, тому команда sudo має бути успішною, інакше ви не зможете оновити сертифікаційні системи системи.
Телеграф

2
Будь ласка , змініть свій відповідь , щоб забезпечити додаткові факти - не залишайте в коментарях.
guntbert

1
Я вважаю, що так і має бути /usr/local/share/ca-certificates/. Дивіться man update-ca-certificates, що говорить про те, що існує білий список, /usr/share/ca-certificates/але про те, як він неявно довіряє всьому /usr/local/share/ca-certificates/каталогу.
Ян Хіксон

3
на Ubuntu 16.04 після додавання ЦС до /usr/local/share/ca-certificatesмене довелося використовувати sudo dpkg-reconfigure ca-certificatesйого для підбору CA.
Метт Л.

41

У ca-certificatesпакеті є інструкція README.Debian:

Якщо ви хочете встановити місцева влада сертифікатів неявним довіреною, будь ласка , помістіть файли сертифікатів в вигляді окремих файлів , що закінчуються .crtINTO /usr/local/share/ca-certificates/і повторного запуску update-ca-certificates.

Зауважте, що тут згадується каталог, відмінний від інших відповідей тут:

/usr/local/share/ca-certificates/

Після копіювання у /usr/local/share/ca-certificates/вас можна оновити дозволи cert та запустити, sudo update-ca-certificatesяк зазначено у відповіді Telegraphers. Ви побачите у висновку, що додано cert.


4
Це працювало і для мене на Ubuntu 16.04. Шлях у прийнятій відповіді для мене не працював.
Плазгот

Це має бути прийнятою відповіддю. Це робоче рішення для сервера ubuntu 16.04 LTS.
Ласіта Бенарагама

15

Розширення .crt, .pem та .cer є взаємозамінними, просто змініть розширення імені файлу, вони мають однакову форму. Спробуйте це:

$ 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

Ну хоча це правда, це не допомогло. Але в майбутньому це може допомогти людям
Universal Electricity

Я додав ще один рядок, спробуйте, щоб git повірив вашому сертифікату, зауважте, що я змінив cer. до .pem в два з 4 кроків замість .crt. @Unicorns Very Very Yummy
Майк

3
Якщо ваш .CER файл є двійковим (формат DER), ви не можете просто змінити розширення. Використовуйте openssl(1)для перетворення сертифіката у формат PEM. Виконати:$ openssl -in mycert.cer -inform DER -out mycert.pem -outform PEM
користувач Arch

1
@Archuser Можливо, правильна команда така:openssl x509 -inform DER -in certificate.cer -out certificate.pem
artificerpi

5

Я використовую таку збірку попередніх відповідей:

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

Він може бути модифікований, щоб бути однолінійним.

Часто обидва site.example.comі example.comє однаковими іменами хостів.


3

Я прочитав усі рішення і вирішив так;

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

У мене була подібна проблема, коли встановлено сертифікат у firefox та google chrome, але оновлення в терміналі sudo apt-get updateне працювало, і 403 заборонені помилки IP. У мене теж був файл sample.cer. Тому в основному я повинен перетворити його в .crt спочатку.

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

Але під час роботи sudo dpkg-reconfigure ca-certificatesя не зміг знайти необхідний сертифікат. Проблема зі мною полягає в тому, що я копіював сертифікат у неправильному місці.

Замість того, щоб скопіювати його, $/usr/share/ca-certificates я скопіював його на $/usr/local/share/ca-certificates Але, розмістивши його в потрібному місці, вирішив мою проблему. Але я все ще не в змозі оновити пакунки або встановити нові пакети.

Швидке виправлення (для мене):

Використання ftp замість http

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

і вище команда працювала. Будь ласка, зробіть копію файла source.list перед тим, як внести зміни.

Якщо щось не зрозуміло або невірно, будь ласка, виправте мене.


0

Для доступу до веб-сайту https, використовуючи браузер CLI або GUI, вам не потрібен сертифікат shool.

Для використання gitчерез http (и) вам потрібно зареєструвати ваш відкритий ключ у налаштуваннях вашого профілю на GitHub .

Більше інформації тут . Змініть свій профіль GitHub тут .


Спробуйте це:

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

… Працює без додаткового сертифіката.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.