настроить Git для принятия определенного самозаверяющего сертификата сервера для определенного удаленного https - PullRequest
136 голосов
/ 31 января 2012

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

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

Ответы [ 3 ]

257 голосов
/ 14 мая 2013

Кратко:

  1. Получить самозаверяющий сертификат
  2. Поместите его в какой-нибудь (например, ~/git-certs/cert.pem) файл
  3. Установите 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.

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

$ 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).

6 голосов
/ 06 февраля 2012

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

1 голос
/ 11 мая 2016

Настройки пользователя OSX.

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

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

Настроить git для доверия этому сертификату:

$ git config --global http.sslCAInfo $ HOME / git-сертификаты / cert.pem

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...