Верификация коммитов в GitLab 9.5.x

Oct 23, 2017 08:37 · 484 words · 3 minute read gitlab

В 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-репозиторий коммит будет отображаться в списке как «подтвержденный».

tweet Share