Верификация коммитов в GitLab 9.5.x
Oct 23, 2017 08:37 · 484 words · 3 minute read
В GitLab последней версии (на момент написания статьи 9.5) появилось важное нововведение — верификация подписанных коммитов. Теперь у всех коммитов с подписью GPG будет отображаться статус их верификации рядом с автором коммита.
Давайте разберемся, как настроить подпись коммитов GPG!
Не секрет, что при коммите изменений в Git-репозиторий существует возможность указать их автора. При этом не производится дополнительная проверка «авторства», поэтому можно представиться другим человеком. Данную проблему решает подпись коммитов — GPG-подпись однозначно указывает на автора, поскольку только у него есть приватный ключ, соответствующий публичному.
В GitLab начиная с версии 9.5 включена поддержка подписей коммитов GPG. Свой публичный ключ можно загрузить в меню “Settings → GPG Keys”, после чего коммиты будут отображаться в GitLab как «подтвержденные».
Если у вас нет GPG ключа, то его легко можно создать. Прежде всего, установите утилиту GPG если ее нет в вашей ОС. Генерируем пару (приватный/публичный) ключей командой (в процессе нужно будет отвечать на вопросы):
gpg --gen-key
На первом шаге нужно выбрать алгоритм шифрования:
Please select what kind of key you want:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (sign only)
(4) RSA (sign only)
Your selection? 1
Далее вводим желаемую длину ключа:
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) 4096
Requested keysize is 4096 bits
Определяем срок действия ключей (в данном примере — ключи бессрочные):
Please specify how long the key should be valid.
0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
Key is valid for? (0) 0
Key does not expire at all
Подтверждаем введенные данные:
Is this correct? (y/N) y
Вводим имя, email-адрес (должен соответствовать основному email-адресу в GitLab) и комментарий (опционально):
GnuPG needs to construct a user ID to identify your key.
Real name: Evgen Lebed
Email address: ealebed@gmail.com
Comment:
You selected this USER-ID:
"Evgen Lebed <ealebed@gmail.com>"
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
На следующем шаге дважды вводим пароль (его нужно будет вводить при каждом коммите изменений в git-репозиторий).
С помощью следующей команды получаем информацию о приватной части созданного GPG ключа:
gpg --list-secret-keys ealebed@gmail.com
Вывод будет примерно следующим:
sec 4096R/435A8DF5 2017-09-06
uid Evgen Lebed (DevOps) <ealebed@gmail.com>
ssb 4096R/BEC4F3BC 2017-09-06
Копируем ID GPG ключа из первой строки (в данном примере это 435A8DF5) и получаем публичную часть ключа с помощью команды:
gpg --armor --export 435A8DF5
Полученный вывод копируем и вставляем в web-интерфейсе GitLab в меню “Settings → GPG Keys”.
Указываем в настройках git
какой GPG ключ использовать для подписи коммитов:
git config --global user.signingkey 435A8DF5
Теперь для коммита изменений с GPG подписью нужно использовать флаг -S
:
git commit -S -m "My commit msg"
на мой взгляд добавлять флаг -S
при каждом коммите утомительно, поэтому попросим git
подписывать все коммиты автоматически:
git config --global commit.gpgsign true
При следующем коммите/пуше изменений в git-репозиторий коммит будет отображаться в списке как «подтвержденный».