Используя 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