Add git_ssl.md

This commit is contained in:
pashko 2025-04-09 18:22:40 +08:00
parent 21564e8756
commit 6d96394569

94
git_ssl.md Normal file
View File

@ -0,0 +1,94 @@
Настройка сертификатов в 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.
Если возникнут дополнительные вопросы, уточните детали, и я помогу разобраться!