Пост

Подпись коммитов через GPG Keys

Эта статья посвящена конфигурации GPG ключей для подписи и шифрования коммитов в веб хостинге(Github,Bitbucket,Gitlab и др.).

Для чего мне это ?

В первую очередь - это безопасность. Очень важно, если вы работаете над большим проектом быть уверенным в том, что внесение изменений происходит от подлинного пользователя, а целостность коммитов полноценна и достаточна. Если злоумышленники каким-то образом смогут получить доступ к вашей учетной записи гитхаба(например), то одним из возможных “маркеров” будет отсутствие специальных бейджей в коммитах.

Тут важно отметить, что сам подход не может и не должен являться единственным безопасным вариантом удерживающим злоумышленников от внесения вреда в ваш код. Это лишь малая часть на пути к построению безопасной разработки проекта.

Настройка

Я буду настраивать GPG в систему Linux используя Ubuntu. Для полноценной настройки нам понадобятся:

  • Терминал
  • Git установленный в системе
  • Зарегестрированный аккаунт на веб-хостинге(у меня это Github)
  1. Заходим в консоль Linux и устанавливаем gpg утилиту.
    Следующая команда позволит установить утилиту для подписи коммитов
    1
    
    sudo apt-get install gpa seahorse
    
  2. Сгенерируем ключ.
    1
    
    gpg --gen-key
    

    При генерации ключа необходимо указать ту почту, которая использовалась при регистрации на веб-хостинге

  3. Выведите информацию о всех сгенерированных ключах
    1
    
    gpg --list-secret-keys --keyid-format LONG
    

    Вы получите примерно следующее: GPG key info Информация о сгенерированном ключе

  4. Получите информацию о приватном ключе.
    Возьмите id ключа из раздела sec после rsa*/(в моем случае это 26EB729A7B84EB12) и выполните команду:
    1
    
     gpg --armor --export 26EB729A7B84EB12
    

    Это экпортирует ваш ключ напрямую в терминал. Именно этот ключ свяжет вашу учетную запись с вашим локальным компьютером.

  5. Добавьте ваш ключ в веб-хостинг.
    Авторизировавшись в вашей учетной записи войдите в настройки вашего профиля(чаще всего это settings).
    Github settings Данные разделы не сильно отличаются у разных хостингов

    Вам необходимо найти раздел связанный с ключами GPG и SSH(часто они идут вместе).
    GPG position Данные разделы не сильно отличаются у разных хостингов

    В этом разделе вы можете увидеть все ваши активные ключи,их сроки действия и даты добавления.
    Необходимо нажать New GPG key и скопировать приватный ключ вместе с заголовками BEGIN и END.
    Add new GPG Рекомендую в имени ключа указать названия устройства для которого оно создается

  6. Обновите настройки Git.
    После добавления ключа, необходимо указать гит ссылку на ваш ключ, а также включить проверку подписи.
    Для этого в вашем терминале введите:
    1
    
     git config --global user.signingkey <Укажите ваш ключ из шага 3>
    
    1
    
     git config --global commit.gpgsign true
    
  7. Сделайте первый коммит.
    Теперь можно приступить к первому коммиту и проверить что все работает.

    Учитывайте, что при первом коммите вылетит запрос с требованием ввести кодовую фразу(указывалась при генерации ключа в шаге 2).
    Если вы используете среду разработки, то этого запроса не будет и ваш комит завершится ошибкой.
    Рекомендую делать первый коммит из терминала, в папке вашего проекта.

    После успешной фиксации изменений и отправки их на сервер отобразится специальный бейдж с подписью:
    Commit verifed Отлично ! Теперь мы доказали всем, что именно мы являемся владельцем этого измения Можно нажать на бейдж и получить информацию о том каким ключом данное изменение было подписано.
    Verifed signed В случае взлома учетных данных и попытки внести изменения в проект, подпись будет отсутствовать

Решение возможных проблем

В WSL2 не работает подпись

Зачастую это проблема связана с самим GPG. Многие сходятся во мнении, что для решения проблемы будет достаточно следующей команды

1
    export GPG_TTY=$(tty)

Это позволит GPG начать подписывать любую информацию. Если вы используете терминал ohMyZsh, добавьте команду в файл .zshrc
Проверить что все работает корректно можно, вбив в терминал:

1
    echo "test" | gpg --clearsign

Если после данной команды не вылетела ошибка. Отлично, GPG работает. Можно пробовать подписывать коммиты в проекте.

На этом все. Надеюсь статья была полезной и сделала вашу разработку немножко безопаснее.

Авторский пост защищен лицензией CC BY 4.0 .

© safonov_egor. Некоторые права защищены.

Использует тему Chirpy для Jekyll

Популярные теги