Вопрос или проблема
Я пишу программное обеспечение, которое использует библиотеку OpenSSL для проверки DSA подписей. У меня есть открытые ключи от отправителей в формате GPG. Как я могу преобразовать их в .pem, чтобы OpenSSL мог их читать?
Я нашел следующее в другой теме:
gpgsm -o secret-key.p12 --export-secret-key-p12 0xXXXXXXXX
Для экспорта мне нужны ключи в ключевом хранилище gpgsm, не так ли? Я просто не могу понять, как импортировать свои ключи в ключевое хранилище, которое использует gpgsm. Я получаю ошибки:
gpgsm --import public.asc
gpgsm: всего обработано: 0
gpgsm: ошибка импорта сертификата: Конец файла
Может ли gpgsm
как-то использовать ключевое хранилище gpg
и выполнять экспорт оттуда?
Ваша команда экспорта правильная, но, как вы и предположили, ключевое хранилище gpgsm
пустое. Вы можете это проверить с помощью:
gpgsm --list-keys
В результате не будет ничего.
На ваш последний вопрос: нет. gpg
и gpgsm
используют разные базы данных. Более подробную информацию можно найти здесь. Вам нужно создать или получить пару ключ/сертификат OpenSSL и импортировать его (в формате PKCS#12) в ключевое хранилище gpgsm (обычно ~/.gnupg/pubring.kbx
), поэтому команда импорта должна быть:
gpgsm --import mycert.p12
Вы можете экспортировать ключи из одной системы, преобразовать их и импортировать в другую, но так называемое преобразование просто предоставляет метаинформацию (в большинстве случаев), и с этой метаинформацией создается совершенно новый сертификат/ключ. Вы можете посмотреть здесь примеры преобразования.
Ответ или решение
Для экспорта публичного ключа в формате PEM с помощью GnuPG, вам необходимо выполнить несколько шагов. Учтите, что GnuPG (gpg) и GnuPG Sm (gpgsm) используют разные базы данных ключей. Таким образом, вы не сможете напрямую импортировать ключи из одного в другое.
Вот как вы можете сделать этот процесс:
-
Экспорт публичного ключа в формате GPG:
Если у вас уже есть публичный ключ в формате GPG, вы можете экспортировать его в текстовом формате, выполнив следующую команду:gpg --export -a 'Имя пользователя или UID' > public_key.asc
Это создаст файл
public_key.asc
, который содержит ваш публичный ключ в ASCII-формате. -
Конвертация GPG ключа в формат PEM:
Для конвертации в PEM-формат, вам сначала нужно будет установитьgpg2
иopenssl
, если они еще не установлены. Используйте следующую команду, чтобы преобразовать ваш ключ:gpg --export -a 'Имя пользователя или UID' | \ openssl x509 -inform der -outform pem -out public_key.pem
Однако, если ваш ключ не является сертификатом (например, это DSA или другой тип ключа), вам может потребоваться использовать другой подход, так как вышеуказанная команда работает только для сертификатов.
Если у вас DSA ключ, вам нужно использовать следующую команду:
gpg --export -a 'Имя пользователя или UID' | \ gpg --dearmor | \ openssl pkey -inform DER -outform PEM -out public_key.pem
-
Использование gpgsm:
Если вы хотите использоватьgpgsm
для работы с X.509 сертификатами, вы можете сначала импортировать ваш существующий сертификат в формате PKCS#12 (если он у вас есть). Вы можете создать его, используя OpenSSL:openssl pkcs12 -export -out mycert.p12 -inkey mykey.key -in mycert.crt
Затем импортируйте его в gpgsm:
gpgsm --import mycert.p12
-
Проверка импортированных ключей:
После импорта ключа вы можете проверить наличие ключа в gpgsm, выполнив команду:gpgsm --list-keys
Если всё прошло успешно, вы сможете экспортировать ваш публичный ключ из gpgsm в формате PEM.
Таким образом, порядок действий выглядит следующим образом:
- Экспортировать публичный ключ с помощью gpg в текстовом формате.
- Конвертировать его в формат PEM (если это не сертификат, вам нужно выполнить соответствующие команды).
- Использовать gpgsm, если это необходимо для работы с X.509 сертификатами.
Если у вас есть какие-либо вопросы о конкретных ошибках или других аспектах процесса, не стесняйтесь задавать их!