diff --git a/src/GIT-GPG-sign.md b/src/GIT-GPG-sign.md new file mode 100644 index 0000000..de51575 --- /dev/null +++ b/src/GIT-GPG-sign.md @@ -0,0 +1,147 @@ +# 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 [keyid] +> addkey +... +> save +``` +`?` - список все комманд +`addkey` - добавить новый сабключ +`change-usage` - поменять флаги usage +`save` - не забываем сохранить результаты перед выходом + +## Экспорт ключей + +Прежде удалять мастер ключ или переносить сабключи на карту, необходимо сделать бекап (экспорт) всей нашей работы. + +``` +gpg -a --export-secret-key [keyid] > master.key # Экспорт основного ключа +gpg -a --export-secret-subkeys [keyid] > subkeys.key # Экспорт сабключей +gpg -a --export [keyid] 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`. + +## Настройка подписи коммитов в git + +Подписать последний коммит +git commit --amend --no-edit -S + +Также можно добавить соответствующий элиас в .ginconfig +sign = commit --amend --no-edit -S + + + + + + + + + + + + + + + + + + +