Как установить сертификаты для командной строки

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. Но я хотел бы увидеть ответ на все вопросы, а не просто мерзавец

Универсальное Электричество
источник
2
Возможная копия Как установить корневой сертификат?
Эрик Карвалью,
@EricCarvalho нет, вот и все .crt. Мне нужно.cer
универсальное электричество
У вас есть проблемы с вашей командой git или что вы хотите сделать? Дай мне пинг с @AB
AB
@AB Я хочу позволить git использовать сертификат, который нам дает школа, вместо того, чтобы пытаться использовать сертификат github. Или, если это не сработает, тогда позвольте школьному сертификату подтвердить подлинность для меня
Universal Electricity
Обратите внимание, что расширения .crt и .cer являются взаимозаменяемыми, просто измените расширение имени файла, они имеют одинаковую форму.
Майк

Ответы:

118

TL; DR

Чтобы все работало, а не только ваш браузер, вам нужно добавить этот сертификат CA в доверенный репозиторий системы.

В убунту:

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

Почему

Позвольте мне также объяснить, что происходит, поэтому другие авторы понимают, почему им не нужен сертификат для использования Github поверх HTTPS.

Что происходит, так это то, что ваша школа перехватывает все соединения SSL, возможно, для их мониторинга.

Для этого то, что они делают, по сути, является атакой «человек посередине», и из-за этого ваш браузер справедливо жалуется, что он не может проверить сертификат github. Ваш школьный прокси получает сертификат github и вместо этого предоставляет свой собственный сертификат.

Когда ваш браузер пытается проверить предоставленный школой сертификат против CA, который подписал сертификат github, он по праву завершается неудачей.

Итак, чтобы SSL-соединение работало в школе, вам нужно сознательно принять эту атаку «MITM». И вы делаете это, добавляя сертификат CA школы в качестве доверенного.

Если вы доверяете этому школьному CA, ваша проверка сертификата поддельного github будет работать, поскольку сертификат поддельного github будет подтвержден школьным центром сертификации.

Помните, что SSL-соединение больше не является безопасным, поскольку администратор вашей школы сможет перехватить все ваши зашифрованные соединения.

телеграфист
источник
По сути, это тот же ответ, что и у Майка без dpkg -configure, который не нужен. Что может происходить, так это то, что git или другая командная строка не на 100% стандартны в отношении их проверки SSL. Использование того, что вы называете «git hack», может понадобиться для того, чтобы обойти «SSL-хак», который ваша школа реализовала первой.
телеграфист
Кроме того, имейте в виду, что для выполнения этих команд вам необходимы права root, поэтому команда sudo должна быть успешной, иначе вы не сможете обновить центры сертификации системы.
телеграфист
2
Пожалуйста, измените свой ответ, чтобы предоставить дополнительные факты - не оставляйте в комментарии.
Гюнтберт
1
Я считаю, что должно быть /usr/local/share/ca-certificates/. Посмотрите man update-ca-certificates, что говорит о существовании белого списка, /usr/share/ca-certificates/но о том, как он неявно доверяет всему в /usr/local/share/ca-certificates/каталоге.
Ян Хиксон
3
в Ubuntu 16.04 после добавления CA /usr/local/share/ca-certificatesя должен был использовать sudo dpkg-reconfigure ca-certificatesего для получения CA.
Мэтт Л.
41

На ca-certificatesупаковке есть инструкции README.Debian:

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

Обратите внимание, что здесь упоминается каталог, отличный от других ответов здесь:

/usr/local/share/ca-certificates/

После копирования в него /usr/local/share/ca-certificates/вы можете обновить разрешения сертификата и запустить, sudo update-ca-certificatesкак указано в ответе Telegraphers. В выводе вы увидите, что сертификат был добавлен.

Роберт Симер
источник
4
Это сработало и для меня в Ubuntu 16.04. Путь в принятом ответе у меня не сработал.
Плазгот
Это должен быть принятый ответ, это рабочее решение для Ubuntu Server 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 очень вкусные
Майк
3
Если ваш файл .CER является двоичным (формат DER), вы не можете просто изменить расширение. Используйте openssl(1)для преобразования сертификата в формат PEM. Run:$ 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

и выше команда сработала. Пожалуйста, сделайте копию файла sources.list перед внесением изменений.

Если что-то не понятно или не правильно, поправьте меня.

Гопал Шарма
источник
0

Для доступа к веб-сайту https, независимо от того, используете ли вы CLI или GUI-браузер, вам не нужен ваш сертификат shool.

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

Больше информации здесь . Измените свой профиль GitHub здесь .


Попробуй это:

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

… Работает без дополнительного сертификата.

AB
источник