Подписанные коммиты и теги
Любой может установить user.name и user.email в конфигурации Git на любое значение. Подписанные коммиты используют криптографические ключи, чтобы доказать, что коммит действительно принадлежит тому, кем он себя выдаёт.
Зачем подписывать коммиты?
- Верификация — доказать, что вы автор, а не кто-то, выдающий себя за вас
- Доверие — мейнтейнеры могут проверить подлинность вкладов
- Безопасность цепочки поставок — защита от несанкционированного внедрения кода
- Соответствие требованиям — некоторые организации требуют подписанных коммитов для аудита
Как это работает
Когда вы подписываете коммит, Git создаёт криптографическую подпись с помощью вашего закрытого ключа. Любой, у кого есть ваш открытый ключ, может проверить, что подпись действительна и коммит не был изменён.
GPG-подпись
GPG (GNU Privacy Guard) — традиционный метод подписи коммитов.
Настройка
# Сгенерировать GPG-ключ
gpg --full-generate-key
# Список ваших ключей
gpg --list-secret-keys --keyid-format=long
# Указать Git, какой ключ использовать
git config --global user.signingkey YOUR_KEY_ID
# Включить подпись по умолчанию
git config --global commit.gpgsign true
Подпись коммита
# Подписать один коммит
git commit -S -m "Add new feature"
# С gpgsign=true все коммиты подписываются автоматически
git commit -m "Add new feature"
Подпись тега
# Создать подписанный тег
git tag -s v1.0.0 -m "Release 1.0.0"
# Проверить подписанный тег
git tag -v v1.0.0
SSH-подпись
Начиная с Git 2.34, вы можете использовать SSH-ключи для подписи — это проще, если у вас уже настроены SSH-ключи.
Настройка
# Указать Git использовать SSH для подписи
git config --global gpg.format ssh
# Указать путь к SSH-ключу
git config --global user.signingkey ~/.ssh/id_ed25519.pub
# Включить подпись по умолчанию
git config --global commit.gpgsign true
После этого git commit будет автоматически подписывать вашим SSH-ключом.
Проверка подписей
# Показать подписи в логе
git log --show-signature
# Проверить конкретный коммит
git verify-commit abc1234
# Проверить тег
git verify-tag v1.0.0
Вывод покажет, является ли подпись Good (действительный ключ, доверенный) или Bad (недействительный или недоверенный).
Значок «Verified» на GitHub
Когда вы отправляете подписанные коммиты на GitHub, рядом с коммитом отображается зелёный значок Verified. Для настройки:
- Сгенерируйте GPG- или SSH-ключ
- Добавьте открытый ключ в свой аккаунт GitHub (Settings > SSH and GPG keys)
- Подписывайте свои коммиты
- Отправьте — GitHub проверит подпись по загруженному ключу
GitHub также автоматически помечает коммиты, сделанные через веб-интерфейс, как «Verified».
GPG и SSH: сравнение
| Аспект | GPG | SSH |
|---|---|---|
| Сложность настройки | Выше — генерация ключей, модель доверия | Ниже — повторное использование существующих SSH-ключей |
| Управление ключами | Отдельная связка ключей GPG | Те же SSH-ключи, что для аутентификации |
| Срок действия / отзыв | Встроенная поддержка | Ручное управление |
| Требуемая версия Git | Любая | 2.34+ |
| Поддержка GitHub | Полная | Полная |
Ключевые моменты
- Подписанные коммиты криптографически доказывают авторство
- Используйте GPG для полного управления ключами или SSH для простоты
git commit -Sподписывает один коммит;commit.gpgsign trueподписывает все коммитыgit log --show-signatureпоказывает статус верификации- Добавьте открытый ключ на GitHub для получения значка «Verified»