Настроить Git для принятия определенного самозаверяющего сертификата сервера для определенного удаленного https
Системный администратор проекта, над которым я работаю, решил, что SSH "слишком много проблем"; вместо этого он настроил Git для доступа через https://
URL (и имя пользователя / пароль аутентификации). Сервер для этого URL представляет самозаверяющий сертификат, поэтому он посоветовал всем отключить проверку сертификата. Это не кажется мне хорошей установкой с точки зрения безопасности.
Можно ли сказать Git, что для удаленного X (или лучше любого удаленного в любом хранилище, которое начинается с https://$SERVERNAME/
) это принимать определенный сертификат, и только этот сертификат? В основном дублирование поведения ключа сервера SSH.
3 ответа
Кратко:
- Получите самоподписанный сертификат
- Положите его в некоторые (например,
~/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).
В Windows в корпоративной среде, где сертификаты распространяются из одного источника, я обнаружил, что этот ответ решил проблему: qaru
Настройки пользователя OSX.
Следующие шаги Принято ответ работал для меня с небольшим дополнением при настройке на OSX.
Я поместил файл cert.pem в каталог под моим пользователем OSX, вошедшим в систему, и таким образом заставил меня настроить местоположение для доверенного сертификата.
Настройте git для доверия этому сертификату:
$ git config --global http.sslCAInfo $ HOME / git-certs / cert.pem
Согласно этой странице на aeminium.org вам необходимо добавить http.sslCAInfo
или же http.sslCAPath
элемент конфигурации в.git/config, который содержит сертификат веб-сервера.