настроить Git, чтобы принять конкретное самоподписанный сертификат сервера для определенного HTTPS и удаленного
системный администратор для проекта, в котором я нахожусь, решил, что SSH-это "слишком много проблем"; вместо этого он настроил Git для доступа через https:// URL (и имя пользователя/пароль аутентификации). Сервер для этого URL-адреса представляет собой самозаверяющий сертификат, поэтому он посоветовал всем отключить проверку сертификатов. Это не кажется мне хорошей установкой, с точки зрения безопасности.
можно ли сказать Git, что для удаленного X (или лучше, любой удаленный в любом репозитории, который начинается с https://$SERVERNAME/) это принять определенный сертификат, и только этот сертификат? В принципе воспроизвести сервер-SSH-ключ поведения.
3 ответов:
кратко:
- получить самозаверяющий сертификат
- положите его в некоторых (например,
~/git-certs/cert.pemфайл)- 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