Как используются клиентские SSL/TLS сертификаты для аутентификации в Git?

Ответ

Клиентские SSL/TLS сертификаты — это один из способов аутентификации при работе с удаленными Git-репозиториями по протоколу HTTPS. Вместо пароля или токена, Git-клиент предоставляет серверу свой персональный сертификат для подтверждения личности.

Этот метод часто используется в корпоративных средах со строгими политиками безопасности.

Как это работает:

  1. Сервер (например, корпоративный GitLab) настраивается так, чтобы запрашивать клиентский сертификат при TLS-рукопожатии.
  2. Клиент (ваш компьютер) при выполнении git push или git pull предоставляет свой сертификат и приватный ключ.
  3. Сервер проверяет, что сертификат подписан доверенным удостоверяющим центром (CA), и предоставляет доступ.

Настройка на стороне клиента:

Нужно указать Git, где находятся ваш сертификат и приватный ключ, с помощью глобальных настроек:

# Путь к вашему клиентскому сертификату в формате PEM
git config --global http.sslCert ~/.ssl/my-cert.pem

# Путь к вашему приватному ключу
git config --global http.sslKey ~/.ssl/my-key.key

Ключевые моменты:

  • Альтернатива: Это альтернатива аутентификации по SSH-ключам, логину/паролю или персональным токенам доступа (PAT).
  • Корпоративное использование: Редко встречается на публичных сервисах вроде GitHub, которые предпочитают SSH-ключи и токены.
  • Формат: Сертификат и ключ обычно должны быть в формате PEM.
  • Защита ключа: Приватный ключ не должен быть защищен паролем, иначе Git будет запрашивать его при каждой операции.

Ответ 18+ 🔞

А, ну вот, смотри, опять эти ваши корпоративные штуки с безопасностью! Клиентские SSL-сертификаты для Git, блядь. Ну, типа, вместо того чтобы пароль вводить или токен, ты, сука, предъявляешь свой персональный цифровой паспорт. Серверу. Как на границе, только в мире кода.

Это, конечно, не для нас, простых смертных, кто на GitHub'е ковыряется. Это когда ты в какой-нибудь большой конторе работаешь, где начальник безопасности — параноик с золотым пистолетом. Там всё строго: "Не подпишешь сертификат — не получишь доступ к репозиторию, иди нахуй".

Как эта магия, блядь, работает:

  1. Сервер (ну, тот самый корпоративный GitLab, который всех заебал) настраивается так, что при каждом твоём чихе в его сторону он орёт: "Предъяви документик, блядь!" Прямо во время TLS-рукопожатия.
  2. Ты (со своим компом) пытаешься сделать git push, а он тебе: "А ну-ка, покажи свой сертификат и приватный ключ, хитрожопая мартышлюшка!"
  3. Сервер смотрит, не поддельный ли твой паспорт, проверяет подпись удостоверяющего центра (того самого, которому все доверяют, ага), и если всё чисто — пускает тебя в святая святых.

Как это у себя настроить, чтобы не орали:

Нужно сказать своему Git'у, где ты спрятал эти важные бумажки. Делается через конфиг:

# Вот тут путь к твоему сертификату (формат PEM, не перепутай, а то не поймёт)
git config --global http.sslCert ~/.ssl/my-cert.pem

# А вот тут — к твоему секретному ключу
git config --global http.sslKey ~/.ssl/my-key.key

Важные нюансы, чтобы не обосраться:

  • Замена всему: Это типа как SSH-ключи, только для HTTPS. Или как токены. Но с бумажками, ёпта.
  • Для своих: На публичных помойках вроде GitHub'а эту хуйню почти не используют — там токены и SSH рулят. Это чисто корпоративная тема, где доверия ебать ноль.
  • Формат — всё: Сертификат и ключ должны быть в PEM. Если принесёшь что-то другое — получишь в рот и в сраку одновременно.
  • Пароль на ключе: Если ты такой умный и поставил на ключ пароль, то Git будет орать на тебя при каждой, блядь, операции. "Дай пароль, сука!" — и так до бесконечности. Так что лучше без него, но храни ключ как зеницу ока, а то накроешься медным тазом.