Compare commits

...

4 Commits

Author SHA1 Message Date
50f9049c98 gpg key expire 2026-01-19 17:24:30 +03:00
f0d89afee8 import public keys from card 2026-01-16 23:25:47 +03:00
d91bdd1fc0 update gitconfig example 2026-01-16 21:48:36 +03:00
6c10f518ce vscode editor for rebase 2025-10-31 10:20:25 +03:00
2 changed files with 94 additions and 16 deletions

View File

@@ -9,6 +9,7 @@ GPG ключи по сравнению с SSH ключами имеют боле
- настройка срока действия ключей с возможностью продления в будущем; - настройка срока действия ключей с возможностью продления в будущем;
- привязка ключей к имени пользователя и почте; - привязка ключей к имени пользователя и почте;
- возможность загрузки публичных ключей на сервера ключей; - возможность загрузки публичных ключей на сервера ключей;
- возможность хранения секретных ключей на аппаратном ключе который поддерживает стандарт OpenPGP Card (например Yubikey)
Под Windows утилита gpg идет вместе с git. Так что можно работать сразу после установки git. Под Windows утилита gpg идет вместе с git. Так что можно работать сразу после установки git.
@@ -81,10 +82,9 @@ gpg --expert --edit-key [id]
Прежде удалять мастер ключ или переносить сабключи на карту, необходимо сделать бекап (экспорт) всей нашей работы. Прежде удалять мастер ключ или переносить сабключи на карту, необходимо сделать бекап (экспорт) всей нашей работы.
``` ```
gpg -a --export-secret-key [id] > master.key # Экспорт основного ключа gpg -a --export-secret-key [id] > master.key # Экспорт мастер ключа (вместе с сабключами)
gpg -a --export-secret-subkeys [id] > subkeys.key # Экспорт сабключей gpg -a --export-secret-subkeys [id] > subkeys.key # Экспорт сабключей (не обязательно)
gpg -a --export [id] public.key # Экспорт публичных ключей gpg -a --export [id] > public.key # Экспорт общего публичного ключа
``` ```
## Сохранение на аппаратный ключ ## Сохранение на аппаратный ключ
@@ -108,11 +108,11 @@ gpg --edit-key [id] # входим в режим редактиро
## Удаление секретных ключей ## Удаление секретных ключей
Удалем секретный ключ: Удаляем секретные ключи:
``` ```
gpg --delete-secret-keys [id] gpg --delete-secret-keys [master-key-id]
``` ```
Удалятся все секретные ключи. Для того чтобы gpg понял что секретные ключи находятся на карте выполняем: Для того чтобы gpg понял что секретные ключи находятся на карте выполняем:
``` ```
gpg --card-status gpg --card-status
``` ```
@@ -127,7 +127,7 @@ https://keys.openpgp.org/
Ключи лучше загружать через web-интерфес чтобы получить ссылку для верификации почты. Ключи лучше загружать через web-интерфес чтобы получить ссылку для верификации почты.
После того как public ключ загружен на сервер, можно добавить URL ключа в настройки карты. Тогда будет возможно настравить новый компьютер совсем просто: После того как public ключ загружен на сервер, можно добавить URL ключа в настройки карты. Тогда будет возможно настраивать новый компьютер совсем просто:
``` ```
gpg --card-edit # Заходим в настройки карты gpg --card-edit # Заходим в настройки карты
> fetch # Скачиваем public ключ > fetch # Скачиваем public ключ
@@ -149,3 +149,68 @@ sign = commit --amend --no-edit -S
unsign = commit --amend --no-edit unsign = commit --amend --no-edit
signoff = commit --amend --no-edit -s signoff = commit --amend --no-edit -s
``` ```
## Настройка чистой системы для подписи аппаратным ключом
Если есть аппаратный ключ и нужно настроить подпись коммитов на чистой системе,
то можно просто импортировать публичные ключи с карты.
Предполагается что `.gitconfig` настроен правильно.
Предварительно можно очистить все настройки `gpg` удалив папку `~/.gpgconf`
Если удалить не получается то надо убить процессы:
```
gpgconf --kill all
```
Импортируем ключи с карты:
```
gpg --card-edit
> fetch
> quit
```
Опционально устанавливаем ключу максимальный уровень доверия:
```
gpg --edit-key [id]
> trust
5
> quit
```
## Продление ключей
Короткий вариант продлить сразу все ключи:
```
gpg --import ~/master.key # временно импортируем мастер ключ
gpg --quick-set-expire [master-key-fingerprint] 1y '*' # продляем на 1 год с текущей даты
gpg --quick-set-expire [master-key-fingerprint] 2025-12-31 '*' # или указываем конкретную дату
gpg --delete-secret-keys [master-key-id] # удаляем секретные ключи
gpg --keyserver keys.openpgp.org --send-keys [master-key-id] # обновляем на сервере
gpg -a --export [master-key-id] > public.key # экспорт публичных ключей
# обновляем public.key на всех серверах git
```
Или вручную по одному:
```
gpg --import ~/master.key # временно импортируем мастер ключ
gpg --edit-key [master-key-id]
> key 1 # выбираем первый сабключ
> expire # редактируем срок действия
> 1y # 1 год например
> key 1 # снимаем старый выбор
> key 2 # выбираем следующий сабключ
> expire # редактируем срок действия
> 1y # 1 год например
> key 2 # снимаем старый выбор
> key 3 # выбираем следующий сабключ
> expire # редактируем срок действия
> 1y # 1 год например
> key 3 # снимаем старый выбор
> save # сохраняем (локальные ключи сотрутся!)
gpg --delete-secret-keys [master-key-id] # удаляем секретные ключи
gpg --keyserver keys.openpgp.org --send-keys [master-key-id] # обновляем на сервере
gpg -a --export [master-key-id] > public.key # экспорт публичных ключей
# обновляем public.key на всех серверах git
```
Обновлять приватные ключи на аппаратных ключах (Yubikey) не нужно, т.к. там храниться только криптографическая часть, без метаданных.

View File

@@ -24,6 +24,7 @@ git config --global user.name "My name" # Имя пользователя п
git config --global user.email my@mail.com # Почта пользователя по умолчанию для всех коммитов git config --global user.email my@mail.com # Почта пользователя по умолчанию для всех коммитов
git config --global color.ui true # Включаем цветной вывод в командах git git config --global color.ui true # Включаем цветной вывод в командах git
git config --global core.quotepath off # Для правильного отображение русских имен файлов git config --global core.quotepath off # Для правильного отображение русских имен файлов
git config --global core.editor "code --wait" # Для использования vscode редактора для rebase
git config --global fetch.prune true # Автоматическая очистка remote веток удаленных на сервере git config --global fetch.prune true # Автоматическая очистка remote веток удаленных на сервере
``` ```
@@ -34,20 +35,32 @@ git config --global fetch.prune true # Автоматическая оч
``` ```
[user] [user]
name = ARNik name = ARNik
email = r.anikeev@gmail.com email = arnik@arnik.ru
signingkey = AEBB0598F42201E3
[color] [color]
ui = true ui = true
[core] [core]
quotepath = off # отображение русских имен файлов quotepath = off # отображение русских имен файлов
editor = code --wait # vscode редактор для rebase
[alias] [alias]
ll = log --oneline --graph --decorate --all ll = log --oneline --graph --decorate --all
st = status --short st = status --short
co = checkout co = checkout
br = branch br = branch
ct = commit ct = commit
sign = commit --amend --no-edit -S
unsign = commit --amend --no-edit
signoff = commit --amend --no-edit -s
pr = remote prune origin
lg = log --graph --all\ lg = log --graph --all\
--pretty=format:'%Cred%h%Creset -%C(auto)%d %Creset%s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --pretty=format:'%Cred%h%Creset -%C(auto)%d %Creset%s %Cgreen(%cr) %C(bold blue)<%an>%Creset %G?'
# to pevent "fatal: detected dubious ownership in repository"
[safe]
directory = *
[gpg "ssh"]
allowedSignersFile = ~/.ssh/allowed_signers
``` ```
--- ---
Для изучения Git и в качестве справки хочу порекомендовать: Для изучения Git и в качестве справки хочу порекомендовать: