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



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



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

820   3  

3 ответов:

кратко:

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

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

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

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

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

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

$ git config --global http.sslCAInfo $HOME/git-certs / cert.Пем

Comments

    Ничего не найдено.