diff --git a/README.md b/README.md index c08e406..0720f65 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,7 @@ * [Конфигурация GIT](src/GIT-config.md) * [SSH авторизация по ключам](src/SSH-key-auth-win.md) * [SSH подпись](src/GIT-SSH-sign.md) +* [GPG подпись](src/GIT-GPG-sign.md) * [Установка TortoiseGit](src/TortoiseGit.md) * [GIT в Bash](src/GIT-Bash.md) * [VS Code](src/VS-Code.md) diff --git a/src/GIT-GPG-sign.md b/src/GIT-GPG-sign.md new file mode 100644 index 0000000..91c493b --- /dev/null +++ b/src/GIT-GPG-sign.md @@ -0,0 +1,151 @@ +# GPG подпись + + + + +GPG ключи по сравнению с SSH ключами имеют более развитый функционал. +- настройка специализации ключа (шифрование, подпись, авторизация, создание подключей); +- отзыв ранее выпущенных ключей; +- настройка срока действия ключей с возможностью продления в будущем; +- привязка ключей к имени пользователя и почте; +- возможность загрузки публичных ключей на сервера ключей; + +Под Windows утилита gpg идет вместе с git. Так что можно работать сразу после установки git. + +Все свои файлы gpg хранит в `~/.gnupg/` + +Полезно добавить в конфиг: +``` +cat << --- >> ~/.gnupg/gpg.conf +keyid-format LONG +with-fingerprint +no-greeting +armor +--- +``` + +Полезные команды: +``` +gpg -k --keyid-format=long # Посмотреть публичные ключи +gpg -K --keyid-format=long # Посмотреть приватные ключи +gpg --full-generate-key # Генерация пары ключей +gpg -a --export # Экспорт публичного ключа +gpg -a --export-secret-keys # Экспорт секретного ключа +gpg --import # Импорт ключа +gpg --delete-key # Удаление публичного ключа +gpg --delete-secrete-key # Удаление секретного ключа +git config --global user.signingkey +``` + +Обозначения типов ключей: +``` +sec - secret primary key (секретный основной ключ) +pub - public primary key (публичный основной ключ) +ssb - secret sub-key (секретный сабключ) +sub - public sub-key (публичный сабключ) +> - ключ есть на карте +# - нет секретного ключа, только заглушка для сабключа +``` + +## Генерация ключей + +Создаем основной (primary) ключ: +``` +gpg --expert --full-generate-key +``` + +Выбираем один из вариантов: +``` +RSA (sign only) # создание только основного ключа c правами [SC] +RSA (set your own capabilities) # создание только основного ключа c настраиваемыми правами +``` +Этот ключ нужен для генерации других сабключей. + +## Генерация сабключей + +Для генерации сабключей заходим в консоль gpg: +``` +gpg --expert --edit-key [id] +> addkey +... +> save +``` +`[id]` - здесь и далее в качестве id можно использовать id ключа, имя или почту пользователя. +`?` - список все комманд +`addkey` - добавить новый сабключ +`change-usage` - поменять флаги usage +`save` - не забываем сохранить результаты перед выходом + +## Экспорт ключей + +Прежде удалять мастер ключ или переносить сабключи на карту, необходимо сделать бекап (экспорт) всей нашей работы. + +``` +gpg -a --export-secret-key [id] > master.key # Экспорт основного ключа +gpg -a --export-secret-subkeys [id] > subkeys.key # Экспорт сабключей +gpg -a --export [id] public.key # Экспорт публичных ключей + +``` + +## Сохранение на аппаратный ключ + + + +``` +gpg --card-status # посмотреть информацию по карте +gpg --edit-key [id] # входим в режим редактирования +> key 1 # выбираем первый сабключ +> keytocard # переносим его на карту +> key 1 # снимаем старый выбор +> key 2 # выбираем следующий сабключ +> keytocard # переносим его на карту +> key 2 # снимаем старый выбор +> key 3 # выбираем следующий сабключ +> keytocard # переносим его на карту +> key 3 # снимаем старый выбор +> save # сохраняем (локальные ключи сотрутся!) +``` + +## Удаление секретных ключей + +Удалем секретный ключ: +``` +gpg --delete-secret-keys [id] +``` +Удалятся все секретные ключи. Для того чтобы gpg понял что секретные ключи находятся на карте выполняем: +``` +gpg --card-status +``` + +Для использования карты на новом компьютере достаточно импортировать public ключ и запустить `gpg --card-status`. + +## Загрузка public ключа на сервер ключей + +Существует огромное кол-во серверов ключей, для примера будем использовать: + +https://keys.openpgp.org/ + +Ключи лучше загружать через web-интерфес чтобы получить ссылку для верификации почты. + +После того как public ключ загружен на сервер, можно добавить URL ключа в настройки карты. Тогда будет возможно настравить новый компьютер совсем просто: +``` +gpg --card-edit # Заходим в настройки карты +> fetch # Скачиваем public ключ +> quit # Выходим +gpg --edit-key [id] # Заходим в редактирование +> trust # Редактируем trust (по умолчанию она сброшена в "unknown") +> 5 # Савим "ultimate" (Это наш собственный ключ, доверяем.) +> save # Сохраняем +``` +И сразу можно подписывать коммиты :) + +## Настройка подписи коммитов в git + +Подписать последний коммит `git commit --amend --no-edit -S` + +Также не лишним будет добавить удобные элиасы в .ginconfig: +``` +sign = commit --amend --no-edit -S +unsign = commit --amend --no-edit +signoff = commit --amend --no-edit -s +```