Как я могу передать строку base64 в качестве входного сертификата для Openssl? - PullRequest
0 голосов
/ 09 мая 2019

У меня есть сертификат, который я получаю в строке. Я просто хочу, чтобы эта строка передавалась как -in в команде openssl.

Но я не вижу никакого метода в openssl, вы можете помочь.

мой код

const { exec } = require('child_process');

        exec('openssl x509 -noout -issuer -in '+certificateString , (err, stdout, stderr) => {
        if (err) {
            console.log(err);
        }else{
            console.log(studout);
        }
        });

Если я передаю URL-адрес файла сертификата, он работает, как этот

openssl x509 -noout -issuer -in сертификат.pem

эта работа

но как я могу передать строку сертификата непосредственно в openssl?

Любая помощь?

1 Ответ

1 голос
/ 09 мая 2019

Во-первых, у вас есть base64 или PEM?Это не одно и то же;хотя PEM включает base64, это не только base64.Если у вас есть файл, который работает с openssl x509 -in file, то это PEM, NOT только base64.Кажется, что люди смотрят на PEM, видят более 40 символов base64, и их мозг отключается и становится неспособным видеть линию тире-BEGIN, линию тире-END и разрывы строк, все из которых ТРЕБУЮТСЯ.

Во-вторых, certificate.pem - это имя файла или путь, а не URL.Имя файла или путь не является URL-адресом, а URL-адрес не является именем файла или пути, хотя некоторые схемы URL (и особенно единственные, которые замечает большинство людей) включают некоторые элементы, общие с именами путей.

Ввод сертификата для openssl x509 должен быть либо (именованным) файлом, либо стандартным вводом (обычно сокращенно stdin).Если вы не хотите предоставлять его в виде именованного файла, nodejs может предоставить данные для стандартного дочернего элемента, но не с помощью методов exec* более высокого уровня, а только более базовых spawn:

* 1020.*

Однако вам не нужно запускать внешнюю программу для разбора сертификата;Есть много библиотек JS, чтобы сделать это.Например, со вторым npmjs находит для меня:

const { Certificate } = require('@fidm/x509');
const { ASN1 } = require('@fidm/asn1');
var iss = Certificate.fromPEM(pem).issuer.attributes;
var s = ""; for(var a of iss){ s += "/" + a.shortName + "=" + a.value; }
console.log(s);

Если у вас действительно был base64, а не PEM, замените третью строку на

const bin = Buffer.from(b64,'base64');
var iss = new Certificate(ASN1.fromDER(bin)).issuer.attributes;
...