Skip to content

Генерация GPG ключа

Подписываем GPG ключом коммиты в Git

Статья актуальна для Linux. Для Windows всё примерно то же самое, только предварительно нужно поставить программу gpg.

Ну вот решили, например: «Пора бы уже подписывать коммиты в гите. Тоже хочу зелёный значок Verified». Тогда надо делать. Всего 3 действия (коротко), ниже — то же самое с объяснениями:

  1. Генерация GPG‑ключа

    bash
    gpg2 --full-gen-key
  2. Загрузка открытого ключа в GitLab/GitHub

    bash
    gpg2 --list-secret-keys --keyid-format LONG i@mbaev.com

    ответ будет что-то вроде

    text
    sec   rsa4096/30F2B65B9246B6CA 2019-04-12 [SC]
    uid               [  абсолютно ] Maksim Baev <my@email.com>
    ssb   rsa4096/B7ABC0813E4028C0 2019-04-12 [E]

    дальше экспортируем

    bash
    gpg2 --armor --export 30F2B65B9246B6CA

    Последняя команда выдаст публичный сертификат, вставляем его в GitLab или GitHub.

  3. Объяснение Git'у, чем подписывать коммиты

    bash
    git config --global user.signingkey 30F2B65B9246B6CA
    git config --global gpg.program gpg2
    git config --global commit.gpgsign true

1. Генерация ключа

Потребуется:

  • адрес e‑mail;
  • сильный пароль;
  • своё имя.

Емейл проверяться не будет, но он должен совпадать с тем, что вы используете в Git'е для авторства коммитов. Он же должен быть зарегистрирован в GitLab/GitHub.

Желательно использовать gpg2:

bash
which gpg2

Если появился какой‑то путь — всё ок. Генерируем 4‑килобайтный ключ:

bash
gpg2 --full-gen-key

Дальше диалог примерно такой (комментарии после #):

text
Выберите тип ключа:
   (1) RSA и RSA (по умолчанию)
   (2) DSA и Elgamal
   (3) DSA (только для подписи)
   (4) RSA (только для подписи)
Ваш выбор? 1                          # тип ключа

длина ключей RSA может быть от 1024 до 4096 бит.
Какой размер ключа Вам необходим? (2048) 4096   # длина ключа

Срок действия ключа? (0)              # просто жмём Enter — без ограничения
Все верно? (y/N) y

Ваше полное имя: Maksim Baev          # полное имя
Адрес электронной почты: i@mbaev.com  # e‑mail, под которым уходят коммиты
Комментарий:
...
Сменить (N)Имя, (C)Комментарий, (E)Адрес или (O)Принять/(Q)Выход? O

После этого gpg будет какое‑то время собирать энтропию (двигаем мышкой, печатаем и т. п.) и сгенерирует пару ключей — публичный и приватный.

2. Загрузка ключа в GitLab / GitHub

Ищем идентификатор сгенерированного ключа:

bash
gpg2 --list-secret-keys --keyid-format LONG i@mbaev.com

Пример вывода:

text
sec   rsa4096/30F2B65B9246B6CA 2019-04-12 [SC]
uid               [  абсолютно ] Maksim Baev <i@mbaev.com>
ssb   rsa4096/B7ABC0813E4028C0 2019-04-12 [E]

ID ключа: 30F2B65B9246B6CA.

Экспортируем публичный ключ:

bash
gpg2 --armor --export 30F2B65B9246B6CA

Вывод вида:

text
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2
...
-----END PGP PUBLIC KEY BLOCK-----

Копируем этот блок и вставляем на страницу GPG‑ключей в GitLab, GitHub или другом сервисе управления репозиториями.

3. Объясняем Git'у, чем подписывать коммиты

Сообщаем Git'у, какой ключ использовать:

bash
git config --global user.signingkey 30F2B65B9246B6CA

Указываем, что нужно использовать gpg2:

bash
git config --global gpg.program gpg2

Включаем подпись всех коммитов по умолчанию:

bash
git config --global commit.gpgsign true

После этого новые коммиты будут подписываться GPG‑ключом, а в интерфейсе GitLab/GitHub напротив них появится зелёный значок Verified.