Статья о том как сконвертировать PEM RSA ключи в формат JWK (JSON Web Key).
Для начала установим Node.js, выполнив следующие действия в консоли:
curl -sL https://deb.nodesource.com/setup_13.x | sudo -E bash - sudo apt-get install -y nodejs
В этом примере я выбрал версию 13.x, т.к. она полностью подходит для этого примера и является самой свежей на момент написания этого руководства.
nodejs -v
Вывод последней команды должен содержать примерно следующее:
v13.7.0
Чтобы использовать функционал генерации ключей нужно установить rsa-pem-to-jwk:
npm install rsa-pem-to-jwk
Так же код можно скопировать из репозитория в виде архива, или, если в системе установлен git, просто склонировав репозиторий:
git clone https://github.com/OADA/rsa-pem-to-jwk.git
Я выбрал директорию для установки /home/username/workspace/rsa-pem-to-jwk
Установим нужные модули и зависимости:
cd /home/username/workspace/rsa-pem-to-jwk npm install
Далее переходим в директорию установки rsa-pem-to-jwk (куда был склонирован репозиторий или распакован загруженный архив). И выполняем команду:
cd /home/username/workspace/rsa-pem-to-jwk npm test
В выводе не должно быть ошибок:

Если всё в порядке можно прервать выполнение Ctrl + C
Опционально. Иногда следует установить дополнительное расширение Mocha:
npm install -g mocha --save-dev
Для начала коныертации следует сгенерировать тестовый сертификат:
ssh-keygen -m PEM -t rsa -b 4096 -C "youremail@example.com"
В процессе генерации пропустим ввод пароля, оставив поле пустым. Путь к файлу можно указать любой, но желательно указать путь директории которую мы выбрали для тестирования функционала (/home/username/workspace/rsa-pem-to-jwk). Позже ключ можно просто скопировать в указанную директорию.
Теперь можно создать файл для конвертации ключа в формат JWK:
touch convert.js
Добавим в файл следующие строки:
var fs = require('fs'); var rsaPemToJwk = require('rsa-pem-to-jwk'); var pem = fs.readFileSync('id_rsa'); var jwk = rsaPemToJwk(pem, {use: 'sig'}, 'private'); console.log(JSON.stringify(jwk, null, 4));
Небольшое пояснение по коду.
- В нём мы подключаем модули файловой системы и модуль конвертации, который установили ранее.
- Далее передаём путь до ключа «id_rsa» (если ключ находится в директории выполнения скрипта, он относительный).
- Ниже в строке указывается тип ключа «private«, не сложно догадаться, что он может быть «public«, всё зависит от того какой ключ мы конвертируем.
- В последней строке выводим результат на экран.
Копируем ключ в директорию /home/username/workspace/rsa-pem-to-jwk, если он ещё не там, и запускаем конвертацию:
node convert.js
В результате получаем JSON массив такого вида:
{ "kty": "RSA", "use": "sig", "n": "...", "p": "...", "q": "...", "dp": "...", "dq": "...", "qi": "..." }
Ключ сконвертирован!
Полезное
Пусть к модулям Node.js определяется так:
npm root -g
Тест можно запустить командой:
npx mocha
или
npx mocha <args>
Не помешает установить набор инструментов для сборки:
sudo apt-get install gcc g++ make
Обновить npm:
sudo npm install -g npm