Подпись коммитов через GPG Keys
Эта статья посвящена конфигурации GPG ключей для подписи и шифрования коммитов в веб хостинге(Github,Bitbucket,Gitlab и др.).
Для чего мне это ?
В первую очередь - это безопасность. Очень важно, если вы работаете над большим проектом быть уверенным в том, что внесение изменений происходит от подлинного пользователя, а целостность коммитов полноценна и достаточна. Если злоумышленники каким-то образом смогут получить доступ к вашей учетной записи гитхаба(например), то одним из возможных “маркеров” будет отсутствие специальных бейджей в коммитах.
Тут важно отметить, что сам подход не может и не должен являться единственным безопасным вариантом удерживающим злоумышленников от внесения вреда в ваш код. Это лишь малая часть на пути к построению безопасной разработки проекта.
Настройка
Я буду настраивать GPG в систему Linux используя Ubuntu. Для полноценной настройки нам понадобятся:
- Терминал
- Git установленный в системе
- Зарегестрированный аккаунт на веб-хостинге(у меня это Github)
- Заходим в консоль Linux и устанавливаем gpg утилиту.
Следующая команда позволит установить утилиту для подписи коммитов1
sudo apt-get install gpa seahorse
- Сгенерируем ключ.
1
gpg --gen-key
При генерации ключа необходимо указать ту почту, которая использовалась при регистрации на веб-хостинге
- Выведите информацию о всех сгенерированных ключах
1
gpg --list-secret-keys --keyid-format LONG
Вы получите примерно следующее:
Информация о сгенерированном ключе
- Получите информацию о приватном ключе.
Возьмите id ключа из раздела sec после rsa*/(в моем случае это26EB729A7B84EB12
) и выполните команду:1
gpg --armor --export 26EB729A7B84EB12
Это экпортирует ваш ключ напрямую в терминал. Именно этот ключ свяжет вашу учетную запись с вашим локальным компьютером.
Добавьте ваш ключ в веб-хостинг.
Авторизировавшись в вашей учетной записи войдите в настройки вашего профиля(чаще всего это settings).
Данные разделы не сильно отличаются у разных хостингов
Вам необходимо найти раздел связанный с ключами GPG и SSH(часто они идут вместе).
Данные разделы не сильно отличаются у разных хостингов
В этом разделе вы можете увидеть все ваши активные ключи,их сроки действия и даты добавления.
Необходимо нажатьNew GPG key
и скопировать приватный ключ вместе с заголовкамиBEGIN
иEND
.
Рекомендую в имени ключа указать названия устройства для которого оно создается
- Обновите настройки Git.
После добавления ключа, необходимо указать гит ссылку на ваш ключ, а также включить проверку подписи.
Для этого в вашем терминале введите:1
git config --global user.signingkey <Укажите ваш ключ из шага 3>
1
git config --global commit.gpgsign true
- Сделайте первый коммит.
Теперь можно приступить к первому коммиту и проверить что все работает.Учитывайте, что при первом коммите вылетит запрос с требованием ввести кодовую фразу(указывалась при генерации ключа в шаге 2).
Если вы используете среду разработки, то этого запроса не будет и ваш комит завершится ошибкой.
Рекомендую делать первый коммит из терминала, в папке вашего проекта.После успешной фиксации изменений и отправки их на сервер отобразится специальный бейдж с подписью:
Отлично ! Теперь мы доказали всем, что именно мы являемся владельцем этого измения Можно нажать на бейдж и получить информацию о том каким ключом данное изменение было подписано.
В случае взлома учетных данных и попытки внести изменения в проект, подпись будет отсутствовать
Решение возможных проблем
В WSL2 не работает подпись
Зачастую это проблема связана с самим GPG. Многие сходятся во мнении, что для решения проблемы будет достаточно следующей команды
1
export GPG_TTY=$(tty)
Это позволит GPG начать подписывать любую информацию. Если вы используете терминал ohMyZsh
, добавьте команду в файл .zshrc
Проверить что все работает корректно можно, вбив в терминал:
1
echo "test" | gpg --clearsign
Если после данной команды не вылетела ошибка. Отлично, GPG работает. Можно пробовать подписывать коммиты в проекте.
На этом все. Надеюсь статья была полезной и сделала вашу разработку немножко безопаснее.