Как сохранить разрывы строк в файле PEM, используя NodeJS, чтобы вставить его в мое приложение? - PullRequest
0 голосов
/ 14 мая 2019

Используя NodeJS, я загружаю файл PEM в свое приложение. Файл живет в AWS S3 и в моей локальной среде. Когда я запускаю приложение локально, все хорошо. Но когда я запускаю его на EC2, я получаю следующую ошибку:

Ошибка: неверная строка личного ключа, должна содержать разрывы строк

Я использую Утилита AWS CloudFront URL Signature

Вот моя функция:

    function createSignedCookie(domain){

        // we need the domain
        if (!domain) {
            return false;
        }

        const cookieLifeSpan = 900000; // milliseconds, is equal to 15 mins
        const expires = new Date().getTime() + cookieLifeSpan;
        const keyPairId = config.accessKeyId;
        const keyPath = config.pemFilePath;

        const options = {expireTime: expires, keypairId: keyPairId, privateKeyPath: keyPath}

        const signedCookies = cfsign.getSignedCookies(domain + '/*', options);

        return signedCookies;
    }

Я пытался добавить \ n в конце каждой строки PEM, но это не помогло.
Я также попытался добавить \ r в конце каждой строки PEM, но это не помогло.
Я посмотрел на это но это не помогло

Вот getSignedCookies метод:

function getSignedCookies(cfUrl, params){
  var privateKey = _getPrivateKey(params);
  var policy = _createPolicy(
    cfUrl, _getExpireTime(params), _getIpRange(params));
  var signature = _createPolicySignature(policy, privateKey);
  var policyStr = new Buffer(policy.toJSON()).toString('base64');

  var cookies = {};
  cookies['CloudFront-Policy'] = normalizeBase64(policyStr);
  cookies['CloudFront-Signature'] = normalizeBase64(signature);
  cookies['CloudFront-Key-Pair-Id'] = params.keypairId;

  return cookies;
}

А вот и метод _privateKey

function _getPrivateKey(params) {
  var privateKeyString = params.privateKeyString;
  var pem;

  if (params.privateKeyPath) {
    pem = fs.readFileSync(params.privateKeyPath);

    privateKeyString = pem.toString('ascii');
    console.log(privateKeyString);
  }

  var newLinePattern = /\r|\n/;
  var lineBreakExists = newLinePattern.test(privateKeyString);
  if (!lineBreakExists) {
      throw new Error('Invalid private key string, must include line breaks');
  }

  return privateKeyString;
}

Оба вышеуказанных метода поставляются с AWS CloudFront URL Signature Utility

1 Ответ

0 голосов
/ 12 июня 2019

Просто замените \ n перед использованием значения:

var private_value = process.env.PRIVATE_KEY.replace(/\\n/g, '\n');
console.log(private_value);
...