Настройте Git, чтобы принять конкретный сертификат самоподписанного сервера для конкретного https-пульта

Сисадмин для проекта, в котором я участвую, решил, что SSH "слишком много проблем"; вместо этого он установил Git для доступа через URL https:// (и аутентификацию имени пользователя/пароля). Сервер для этого URL-адреса представляет собой самозаверяющий сертификат, поэтому он посоветовал всем отключить проверку сертификата. Это не влияет на меня, как на хорошую настройку, с точки зрения безопасности.

Можно ли сообщить Git, что для удаленного X (или, лучше, любого удаленного в любом репозитории, который начинается с https://$SERVERNAME/), он должен принять конкретный сертификат и только этот сертификат? В основном, повторное использование поведения сервера SSH.

Ответ 1

Коротко:

  • получить самоподписанный сертификат
  • поместите его в файл (например, ~/ git -certs/cert.pem)
  • установить git, чтобы доверять этому сертификату с помощью параметра http.sslCAInfo.

Подробнее:

Получить самоподписанный сертификат удаленного сервера

Предполагая, что URL-адрес сервера repos.sample.com и вы хотите получить к нему доступ через порт 443.

Существует несколько вариантов, как их получить.

получить сертификат с помощью openssl

$ openssl s_client -connect repos.sample.com:443

Поймайте вывод в файл cert.pem и удалите все, кроме части между (и включая) -BEGIN CERTIFICATE- и -END CERTIFICATE-

Содержимое результирующего файла ~/ git -certs/cert.pem может выглядеть так:

-----BEGIN CERTIFICATE-----
MIIDnzCCAocCBE/xnXAwDQYJKoZIhvcNAQEFBQAwgZMxCzAJBgNVBAYTAkRFMRUw
EwYDVQQIEwxMb3dlciBTYXhvbnkxEjAQBgNVBAcTCVdvbGZzYnVyZzEYMBYGA1UE
ChMPU2FhUy1TZWN1cmUuY29tMRowGAYDVQQDFBEqLnNhYXMtc2VjdXJlLmNvbTEj
MCEGCSqGSIb3DQEJARYUaW5mb0BzYWFzLXNlY3VyZS5jb20wHhcNMTIwNzAyMTMw
OTA0WhcNMTMwNzAyMTMwOTA0WjCBkzELMAkGA1UEBhMCREUxFTATBgNVBAgTDExv
d2VyIFNheG9ueTESMBAGA1UEBxMJV29sZnNidXJnMRgwFgYDVQQKEw9TYWFTLVNl
Y3VyZS5jb20xGjAYBgNVBAMUESouc2Fhcy1zZWN1cmUuY29tMSMwIQYJKoZIhvcN
AQkBFhRpbmZvQHNhYXMtc2VjdXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEP
ADCCAQoCggEBAMUZ472W3EVFYGSHTgFV0LR2YVE1U//sZimhCKGFBhH3ZfGwqtu7
mzOhlCQef9nqGxgH+U5DG43B6MxDzhoP7R8e1GLbNH3xVqMHqEdcek8jtiJvfj2a
pRSkFTCVJ9i0GYFOQfQYV6RJ4vAunQioiw07OmsxL6C5l3K/r+qJTlStpPK5dv4z
Sy+jmAcQMaIcWv8wgBAxdzo8UVwIL63gLlBz7WfSB2Ti5XBbse/83wyNa5bPJPf1
U+7uLSofz+dehHtgtKfHD8XpPoQBt0Y9ExbLN1ysdR9XfsNfBI5K6Uokq/tVDxNi
SHM4/7uKNo/4b7OP24hvCeXW8oRyRzpyDxMCAwEAATANBgkqhkiG9w0BAQUFAAOC
AQEAp7S/E1ZGCey5Oyn3qwP4q+geQqOhRtaPqdH6ABnqUYHcGYB77GcStQxnqnOZ
MJwIaIZqlz+59taB6U2lG30u3cZ1FITuz+fWXdfELKPWPjDoHkwumkz3zcCVrrtI
ktRzk7AeazHcLEwkUjB5Rm75N9+dOo6Ay89JCcPKb+tNqOszY10y6U3kX3uiSzrJ
ejSq/tRyvMFT1FlJ8tKoZBWbkThevMhx7jk5qsoCpLPmPoYCEoLEtpMYiQnDZgUc
TNoL1GjoDrjgmSen4QN5QZEGTOe/dsv1sGxWC+Tv/VwUl2GqVtKPZdKtGFqI8TLn
/27/jIdVQIKvHok2P/u9tvTUQA==
-----END CERTIFICATE-----

получить сертификат с помощью веб-браузера

Я использую redmine с репозиториями git, и я обращаюсь к тому же URL-адресу для веб-интерфейса и для доступа к командной строке git. Таким образом, я должен был добавить исключение для этого домена в свой веб-браузер.

Используя Firefox, я отправился на Options -> Advanced -> Certificates -> View Certificates -> Servers, нашел там самонастраиваемый хост, выбрал его и используя кнопку Export, у меня есть точно такой же файл, который был создан с помощью openssl.

Примечание. Я был немного удивлен, нет никакого имени упомянутого авторитета. Это нормально.

Наличие доверенного сертификата в выделенном файле

Предыдущие шаги должны привести к наличию сертификата в каком-либо файле. Неважно, какой файл он до тех пор, пока он будет видимым для вашего git при доступе к этому домену. Я использовал ~/git-certs/cert.pem

Примечание. Если вам нужны более надежные самоподписанные сертификаты, поместите их в один файл:

-----BEGIN CERTIFICATE-----
MIIDnzCCAocCBE/xnXAwDQYJKoZIhvcNAQEFBQAwgZMxCzAJBgNVBAYTAkRFMRUw
...........
/27/jIdVQIKvHok2P/u9tvTUQA==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
AnOtHeRtRuStEdCeRtIfIcAtEgOeShErExxxxxxxxxxxxxxxxxxxxxxxxxxxxxxw
...........
/27/jIdVQIKvHok2P/u9tvTUQA==
-----END CERTIFICATE-----

Это будет работать (но я тестировал его только с одним сертификатом).

Настроить git, чтобы доверять этому сертификату

$ git config --global http.sslCAInfo /home/javl/git-certs/cert.pem

Вы также можете попытаться сделать эту систему в целом, используя --system вместо --global.

И протестируйте его: теперь вы сможете общаться с вашим сервером, не прибегая к:

$ git config --global http.sslVerify false #NO NEED TO USE THIS

Если вы уже установили свой git в незнание сертификатов ssl, отмените его:

$ git config --global --unset http.sslVerify

и вы также можете проверить, что вы сделали все правильно, без орфографических ошибок:

$ git config --global --list

что должно указывать все переменные, которые вы установили глобально. (Я неправильно использовал http для htt).

Ответ 2

Согласно эта страница на aeminium.org  вам нужно добавить элемент конфигурации http.sslCAInfo или http.sslCAPath в .git/config, который содержит сертификат веб-сервера.

Ответ 3

Пользовательские настройки OSX.

Следуя шагам принятого ответа, я работал с небольшим дополнением при настройке на OSX.

Я поместил файл cert.pem в каталог под моим OSX, зарегистрированным пользователем, и, таким образом, мне удалось настроить местоположение для доверенного сертификата.

Настройте git, чтобы доверять этому сертификату:

$git config --global http.sslCAInfo $HOME/ git -certs/cert.pem