July 7, 2022

Экспорт и сортировка gpg ключей с помощью Powershell

Поступила мне рабочая задача. В нашей сетке появился замечательный сосед, он же новый сервер с публичными ключами gpg. По определённым причинам он сервер находится глубоко, глубоко, не имеет доступа к сети и провести миграцию типа сервер-сервер нельзя. Да и старый сервак был весьма в загаженном состоянии как выяснилось, позже. Еще одной причиной стало нежелание тащить за собой кучу старых и не нежных ключей. Почесав бороду решил я провернуть эту операцию на Powershell.

Получившийся скрип доступен на Github и может носить почетное звание "Говно-Код года", ну работает и ладно.

Далее я коротко описал процесс экспорта и последующей сортировки ключей.

Дампим все ключи со старого sks сервера.

sks dump 1 pubkeysdump/ 

В моём случае было 300к+ ключей так что это заняло немного времени. В итоге оказалось что валидных было 1800+ остальные, а остальные были пустыми 0кб, наверно на сервере давно не чистили кеш и не оптимизировали DB. Так что советую пробежаться

find /Folder -size 0 -print -delete 

и по удалять мусор.

Зипуем наше богатство

zip -r pubkeysdump.zip pubkeysdump/ 

и копируем архив на тачку где стоит GPG4Win с Kleopara

Распаковываем архив и стартуем консоль(через Gui делать не советую, будет адски виснуть) и импортируем все ключи

gpg --import *.pgp 
(это было реально очень долго...)

Тут до меня дошло что куча ключей была пустыми(то о чем я писал выше)

Стартуем Kleopatra(главное чтобы не бахнуло) и проверяем результат.

Далее берём скрипт, стартуем(я надеюсь не надо показывать как стартовать ps скрипты) и идём пить кофе. Если будете использовать скрипт не забудте поправить переменные указанные ниже.

Что делает скрипт:

Экспортирует все ключи с Kleopatra и сохранит их в формате [email protected]

Далее базируясь на дате создания ключа (SCE) и на домене в имени ключа скрипт раскидает все ключи по 4 папкам

1. Актуальные ключи работников нашей фирмы

2. Старые ключи работников нашей фирмы

3. Актуальные ключи клиентов нашей фирмы

4. Старые ключи клиентов нашей фирмы

В моём случае, актуальное это от 2018-01-01 года и выше.(в 2018 году мы обновляли все ключи). Этот параметр указывается в переменной [string]$MinimalDate ну и домен вашей фирмы в [string]$CompanyDomain.

Что делать с этим добром далее решать вам, я же просто закинул свежие ключи на новый сервер и пошел заниматься другими делами.

Самое забавное в этом скрипте, помимо его существования... Этот франкенштейн которого мне пришлось создать чтобы выдергивать дату из ключа.

gpg --show-keys $Key.ToString() | Select-String -Pattern "[\d]{4}-[\d]{2}-[\d]{2}" | Select-Object -First 1 | % { $_.Matches } | %{ $_.Value }

Если у вас дополнительные идеи для проверок, сортировок или какие-либо улучшения, то жду предложения в комментах, а лучше коммитов на Github.

🌎 Миру — мир!