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

94 lines
7.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Настройка сертификатов в 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:
```bash
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. Добавьте сертификат:
```bash
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. Подтвердите добавление:
```bash
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. **Проверка работы сертификата**
После добавления сертификата выполните тестовый запрос:
```bash
git ls-remote https://azuredevops.corp.org/TEST/_git/test
```
Если проблема решена, команда выполнится без ошибок SSL.
Если возникнут дополнительные вопросы, уточните детали, и я помогу разобраться!