Экспорт выгруженного посредством плагина открытого ключа в PEM

Добрый вечер

Мне нужно сохранить выгруженный из устройства открытый ключ в формате PEM для дальнейшего использования на сервере. Открытый ключ выгружается при помощи функции getPublicKeyValue(). Есть ли пример, который показывает как сгенерировать из него PEM при помощи JavaScript или PHP?

(В API плагина присутствуют функции для выгрузки сертификатов и запросов в формате PEM; может быть есть такая-же функция для открытых ключей?)

Спасибо

(2016-11-16 19:44:01 отредактировано Анатолий Убушаев)

Re: Экспорт выгруженного посредством плагина открытого ключа в PEM

Здравствуйте, Егор!

Да всё верно, данная функция getPublicKeyValue() возвращает открытый ключ в HEX.
Полученный ключ в HEX нужно конвертировать в Base64 (PEM).

Для PHP:

base64_encode(pack('H*',$hexadecimal_string));

взято от сюда https://www.sitepoint.com/community/t/h … ction/6891


Для JavaScript:

var base64String = new Buffer(hexString, 'hex').toString('base64')

взято от сюда http://stackoverflow.com/questions/2319 … javascript

Re: Экспорт выгруженного посредством плагина открытого ключа в PEM

Анатолий, спасибо за ответ!

Правильно ли я понял, что если я помещу в начале файла строку '-----BEGIN PUBLIC KEY-----', в конце '-----END PUBLIC KEY-----', а между ними - base64 самого ключа, то получится файл, который примет openssl (в командной строке) для проверки подписи.

(2016-11-17 13:46:03 отредактировано Анатолий Убушаев)

Re: Экспорт выгруженного посредством плагина открытого ключа в PEM

egor.andreev пишет:

Анатолий, спасибо за ответ!

Правильно ли я понял, что если я помещу в начале файла строку '-----BEGIN PUBLIC KEY-----', в конце '-----END PUBLIC KEY-----', а между ними - base64 самого ключа, то получится файл, который примет openssl (в командной строке) для проверки подписи.

Да, всё верно, получится файл PEM. После, с ним можно будет работать в OpenSSL.

Re: Экспорт выгруженного посредством плагина открытого ключа в PEM

Кстати, какой должен быть формат файла с подписью?

Я создал вот такой (test-sign.txt):
-----BEGIN PKCS7-----
TKM8IFPC+MqUThFSaG7LOYi0OjE6znk7whMjqewIkfOAVBPpn6KVsqcY1nVlwGQ7
p/VjD89I7PJezoZU+JszFw==
-----END PKCS7-----

Команда
openssl dgst -sha512 -verify test.pem -inform pem -signature test-sign.txt test-in.txt
выдала следующее сообщение:

No signature to verify: use the -signature option

(2016-11-18 15:24:19 отредактировано egor.andreev)

Re: Экспорт выгруженного посредством плагина открытого ключа в PEM

Коллеги, PEM, созданный таким образом, не читается openssl. Это просто "тело" ключа, без необходимой для формата PEM "обвязки" с метаданными. Подскажите, пожалуйста, как на стороне сервера проверять подпись, созданную открытым ключом (выгруженным при помощи getPublicKeyValue()).

Я ограничен использованием самой ключевой пары, запросы на сертификаты и сертификаты создавать и использовать не могу (а их можно выгрузить в виде PEM).

Re: Экспорт выгруженного посредством плагина открытого ключа в PEM

egor.andreev пишет:

Я создал вот такой (test-sign.txt):
-----BEGIN PKCS7-----
TKM8IFPC+MqUThFSaG7LOYi0OjE6znk7whMjqewIkfOAVBPpn6KVsqcY1nVlwGQ7
p/VjD89I7PJezoZU+JszFw==
-----END PKCS7-----

Здесь у вас не PKCS#7 подпись.
Поэтому и не съедается OpenSSL.
Вы какой функцией плагина создаете подпись?

Re: Экспорт выгруженного посредством плагина открытого ключа в PEM

rawSign() - ТЗ требует работы только с открытым ключом

Re: Экспорт выгруженного посредством плагина открытого ключа в PEM

Исходя из названия функция rawSign выдает "голую" подпись, без CMS конверта.
Если вы хотите проверять подпись OpenSSL-ем то надо и подпись PKCS#7.