Compare commits
7 Commits
6c10f518ce
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 9d7356bd96 | |||
| 39b27546f6 | |||
| 9292749b05 | |||
| 35ff17714c | |||
|
7cb846a84c
|
|||
|
f0d89afee8
|
|||
|
d91bdd1fc0
|
@@ -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) не нужно, т.к. там храниться только криптографическая часть, без метаданных.
|
||||||
@@ -36,6 +36,7 @@ git config --global fetch.prune true # Автоматическая
|
|||||||
[user]
|
[user]
|
||||||
name = ARNik
|
name = ARNik
|
||||||
email = arnik@arnik.ru
|
email = arnik@arnik.ru
|
||||||
|
signingkey = AEBB0598F42201E3
|
||||||
[color]
|
[color]
|
||||||
ui = true
|
ui = true
|
||||||
[core]
|
[core]
|
||||||
@@ -47,9 +48,19 @@ git config --global fetch.prune true # Автоматическая
|
|||||||
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 и в качестве справки хочу порекомендовать:
|
||||||
|
|||||||
@@ -45,3 +45,15 @@
|
|||||||
- `%USERPROFILE%\.vscode`
|
- `%USERPROFILE%\.vscode`
|
||||||
- `%AppData%\Code`
|
- `%AppData%\Code`
|
||||||
|
|
||||||
|
## VS Code полезные настройки
|
||||||
|
|
||||||
|
- `files.autoSave` - автоматическое сохранение файлов
|
||||||
|
- `workbench.editor.enablePreview` - открытие файлов в режиме preview
|
||||||
|
- `editor.renderWhitespace` - показ табов/пробелов
|
||||||
|
- `window.zoomLevel` - масштаб по умолчанию
|
||||||
|
- `terminal.integrated.cursorStyle` - вид курсора в терминале (line)
|
||||||
|
- `terminal.integrated.cursorBlinking` - (check)
|
||||||
|
- `terminal.integrated.cursorStyleInactive` - (underline)
|
||||||
|
- `editor.occurrencesHighlight` - подсветка при постановке курсора (off)
|
||||||
|
- `window.title` - называние окна и кнопки в панели задач (${rootName}${separator}${profileName})
|
||||||
|
- `workbench.list.openMode` - как открывать файлы (doubleClick)
|
||||||
|
|||||||
Reference in New Issue
Block a user