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