devops/git_ssl.md
2025-04-09 18:22:40 +08:00

7.0 KiB
Raw Blame History

Настройка сертификатов в Windows для Git может быть сложной задачей, особенно если вы используете несколько инструментов (например, Git Bash, OpenJDK через keytool, и т.д.). Давайте разберёмся, куда правильно добавлять самоподписанный сертификат (self-signed certificate) для работы с Git.


1. Где хранятся сертификаты для Git на Windows?

Git на Windows использует OpenSSL для работы с SSL-сертификатами. Это означает, что Git полагается на файлы сертификатов, которые находятся в следующих директориях:

Основные пути:

  • C:\Program Files\Git\mingw64\etc\ssl\certs\ca-bundle.crt
    Это основной файл, который Git использует для проверки SSL-сертификатов. Этот файл содержит "пакет" доверенных корневых сертификатов.

  • C:\Program Files\Git\mingw64\etc\ssl\certs\ca-bundle.trust.crt
    Этот файл также может использоваться Git, но он обычно является резервным или дополнительным.

Другие пути:

  • C:\Program Files\Git\mingw64\etc\pki\ca-trust\extracted\openssl\ca-bundle.trust.crt
    Этот путь используется только в случае, если Git настроен на использование специальных конфигураций PKI. Обычно это не требуется.

  • C:\Program Files\Git\mingw64\share\pki\ca-trust-source
    Этот каталог предназначен для добавления пользовательских сертификатов в системы, использующие ca-certificates (например, Linux). На Windows это редко используется.

  • C:\Program Files\Git\mingw64\etc\pki\ca-trust\extracted\java\cacerts
    Этот файл используется Java (keytool) для управления сертификатами. Он не влияет на работу Git, так как Git использует OpenSSL, а не Java.


2. Как правильно добавить self-signed сертификат?

Шаги для добавления сертификата в Git:

  1. Получите сертификат:

    • Если у вас есть .crt или .pem файл с сертификатом, сохраните его локально (например, my-cert.crt).
  2. Добавьте сертификат в ca-bundle.crt:

    • Откройте файл C:\Program Files\Git\mingw64\etc\ssl\certs\ca-bundle.crt в текстовом редакторе (например, Notepad++).
    • Вставьте содержимое вашего сертификата (my-cert.crt) в конец файла.
    • Убедитесь, что сертификат начинается с -----BEGIN CERTIFICATE----- и заканчивается -----END CERTIFICATE-----.
  3. Альтернативный способ: указать отдельный файл через Git config: Если вы не хотите изменять ca-bundle.crt, вы можете указать путь к вашему сертификату через Git:

    git config --global http.sslCAInfo "C:/path/to/my-cert.crt"
    

3. Использование keytool для Java-приложений

Если вы используете keytool для добавления сертификата в хранилище Java (cacerts), это не повлияет на Git, так как Git использует OpenSSL, а не Java. Однако, если вы работаете с Java-приложениями (например, Maven, Gradle), вы можете добавить сертификат в cacerts:

  1. Найдите файл cacerts:

    • Обычно он находится по пути:
      C:\Program Files\Java\<version>\lib\security\cacerts
  2. Добавьте сертификат:

    keytool -import -trustcacerts -keystore "C:\Program Files\Java\<version>\lib\security\cacerts" -storepass changeit -alias my-cert -file "C:/path/to/my-cert.crt"
    
    • Замените <version> на версию Java.
    • Пароль по умолчанию для cacerts: changeit.
  3. Подтвердите добавление:

    keytool -list -keystore "C:\Program Files\Java\<version>\lib\security\cacerts" -alias my-cert
    

4. Куда добавлять сертификат для Git?

Ответ зависит от ваших целей:

Цель Куда добавлять сертификат
Для работы с Git C:\Program Files\Git\mingw64\etc\ssl\certs\ca-bundle.crt
Для работы с Git (альтернативно) Указать путь через git config --global http.sslCAInfo "C:/path/to/my-cert.crt"
Для работы с Java-приложениями C:\Program Files\Java\<version>\lib\security\cacerts (используйте keytool)
Для системного использования Импортируйте сертификат в хранилище сертификатов Windows через certmgr.msc

5. Рекомендации

  • Если вы добавили сертификат в ca-bundle.crt, перезапустите Git Bash или терминал, чтобы изменения вступили в силу.
  • Если вы используете http.sslCAInfo, убедитесь, что путь указан правильно и доступен из любой директории.
  • Если вы работаете в корпоративной среде, уточните у администратора, какой именно сертификат нужно добавить и куда.

6. Проверка работы сертификата

После добавления сертификата выполните тестовый запрос:

git ls-remote https://azuredevops.corp.org/TEST/_git/test

Если проблема решена, команда выполнится без ошибок SSL.

Если возникнут дополнительные вопросы, уточните детали, и я помогу разобраться!