Как проверить подпись коммита?

Для проверки подписи коммита можно использовать команду:
git verify-commit <commit-hash>
Она проверит подпись и выведет информацию о ней.
Также можно использовать графические инструменты, такие как GitHub Desktop или SourceTree, которые часто отображают статус подписи коммита.
Для автоматической проверки подписей при получении данных, можно настроить git config с опцией receive.certifySubmoduleCommits или receive.fsck.badObject.

Для проверки подписи коммита в Git существует несколько способов, в зависимости от того, как была настроена подпись (GPG, S/MIME или SSH) и какие инструменты доступны.

Основные способы проверки подписи коммита:

  1. Использование `git log --show-signature` (GPG/S/MIME):

    Эта команда отображает информацию о подписи каждого коммита в логе. Если коммит подписан корректно, покажется информация о статусе подписи (например, "Good signature"). Если подпись недействительна или отсутствует, будет отображено соответствующее сообщение об ошибке.

    git log --show-signature -1 <hash_коммита>

    Замените <hash_коммита> на хеш коммита, который вы хотите проверить. Флаг -1 ограничивает вывод информации только об одном коммите.

  2. Использование `git verify-commit` (GPG/S/MIME):

    Эта команда непосредственно проверяет подпись коммита и возвращает статус. Это более компактный способ, чем `git log --show-signature`.

    git verify-commit <hash_коммита>

    Успешная проверка не возвращает ничего (тихо), а ошибки подписи выдадут соответствующие сообщения. Обратите внимание, что для работы `git verify-commit` необходимо настроить доверенные ключи GPG/S/MIME.

  3. Проверка подписи SSH (Git 2.34+):

    Начиная с Git 2.34, коммиты можно подписывать с использованием SSH-ключей. Проверка происходит аналогичными способами, как и в GPG, но с другим подходом к настройке доверенных ключей.

    git log --show-signature -1 <hash_коммита>
    git verify-commit <hash_коммита>

    Для SSH-подписей необходимо настроить user.signingkey, который должен соответствовать одному из ваших SSH-ключей, а также настроить gpg.format = ssh. Вместо GPG keyring Git будет использовать файл ~/.ssh/known_hosts для определения доверенных ключей.

  4. Настройка доверенных ключей (важно для GPG/S/MIME):

    Для того чтобы Git мог проверить подпись, необходимо иметь настроенные доверенные ключи GPG/S/MIME. Это делается путем импорта публичного ключа подписавшего коммит в ваш GPG keyring (для GPG) или хранилище сертификатов (для S/MIME).

    Например, для GPG:

    gpg --import <путь_к_публичному_ключу>

    После импорта ключа, необходимо указать Git, что вы доверяете этому ключу. Обычно это делается путем редактирования файла `~/.gnupg/trustdb.gpg` (но это устаревший метод). Лучший способ - использовать `git config --global user.signingkey <id_ключа>` для указания ключа, который нужно использовать для подписи, и убедиться, что этот ключ присутствует в вашем GPG keyring и считается доверенным.

  5. Проверка в веб-интерфейсе (GitHub, GitLab, Bitbucket):

    Большинство веб-интерфейсов Git (GitHub, GitLab, Bitbucket и т.д.) отображают информацию о статусе подписи коммита непосредственно на странице коммита. Обычно рядом с коммитом можно увидеть значок, указывающий на то, что коммит подписан и подпись является действительной. Это самый простой и наглядный способ проверки, если вы работаете через веб-интерфейс.

Важно: Успешная проверка подписи не гарантирует абсолютной безопасности. Она лишь подтверждает, что коммит был подписан ключом, которому вы доверяете. Необходимо также убедиться, что вы доверяете владельцу ключа и что ключ не был скомпрометирован.

0