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

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

Итак, в школе нам нужно установить сертификат для доступа к 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

решение1

TL;DR

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

В убунту:

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

Почему

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

Происходит следующее: ваша школа перехватывает все SSL-сообщения, вероятно, с целью их мониторинга.

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

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

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

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

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

решение2

В упаковке 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. Вы увидите в выводе, что сертификат был добавлен.

решение3

Расширения .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

решение4

Я использую следующую подборку предыдущих ответов:

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являются одними и теми же именами хостов.

Связанный контент