Не могу импортировать .pem файлы в Express

1

Я пришел из этого другого вопроса, который остался без ответа:

Ну, я обнаружил что-то новое. Я все еще не могу импортировать свой сертификат, и когда я пытаюсь выполнить приложение Node/express, он терпит неудачу с той же ошибкой, но теперь я думаю, что каким-то образом пакет fs неправильно читает мои файлы.pem.

Взглянуть:

// Setup HTTPS
const httpsPort = 3443;
const options = {
  key: fs.readFileSync("./key.pem"),
  cert: fs.readFileSync("./cert.pem")
};

console.log("KEY: ", options.key)
console.log("CERT: ", options.cert)

var secureServer = https.createServer(options, app).listen(httpsPort, () => {
    console.log(">> CentraliZr listening at port "+httpsPort);
});

Я получаю следующий вывод:

C:\Zerok\dev\centralizr>node index.js
KEY:  <Buffer 2d 2d 2d 2d 2d 42 45 47 49 4e 20 50 52 49 56 41 54 45 20 4b 45 59 2d 2d 2d 2d 2d 0d 0a 70 52 39 37 51 33 6f 50 5a 5a 59 75 39 46 6c 31 54 6d 30 0d 0a ... >
CERT:  <Buffer 2d 2d 2d 2d 2d 42 45 47 49 4e 20 43 45 52 54 49 46 49 43 41 54 45 2d 2d 2d 2d 2d 0a 4d 49 49 45 4a 54 43 43 41 36 79 67 41 77 49 42 41 67 49 49 48 48 ... >
_tls_common.js:85
      c.context.setKey(options.key, options.passphrase);
                ^

Error: error:0906D064:PEM routines:PEM_read_bio:bad base64 decode
    at Error (native)
    at Object.createSecureContext (_tls_common.js:85:17)
    at Server (_tls_wrap.js:776:25)
    at new Server (https.js:26:14)
    at Object.exports.createServer (https.js:47:10)
    at Object.<anonymous> (C:\Zerok\dev\centralizr\index.js:29:26)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)

Как вы можете себе представить, это даже не похоже на то, как выглядит настоящий сертификат или ключевой файл. У них есть следующее содержание (нет проблем с их отображением, поскольку они являются бесплатными, автоматически закрепленными ключами только для целей тестирования):

Изображение 174551

Изображение 174551

Итак... что случилось? Почему Node читает эти файлы как... шестнадцатеричный буфер? Я не совсем понимаю.

ОБНОВИТЬ:

Хорошо, благодаря Дереку Брауну, теперь я могу видеть содержимое обоих файлов, хотя я продолжаю получать ту же ошибку: "bad base64 decode":

_tls_common.js:85
      c.context.setKey(options.key, options.passphrase);
                ^

Error: error:0906D064:PEM routines:PEM_read_bio:bad base64 decode
    at Error (native)
    at Object.createSecureContext (_tls_common.js:85:17)
    at Server (_tls_wrap.js:776:25)
    at new Server (https.js:26:14)
    at Object.exports.createServer (https.js:47:10)
    at Object.<anonymous> (C:\Zerok\dev\centralizr\index.js:29:26)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
Теги:
express
https

1 ответ

2

readFileSync(...) возвращает шестнадцатеричный буфер, если не указана кодировка. Вы должны указать кодировку как utf8 (или любую другую кодировку файла, которую вы используете), чтобы этого не произошло:

const options = { key: fs.readFileSync("./key.pem", "utf8"), cert: fs.readFileSync("./cert.pem","utf8") };
  • 0
    Это исправило первую часть, спасибо! Но я продолжаю получать другую ошибку ... теперь я могу видеть содержимое обоих файлов должным образом, хотя все равно выдает ошибку "bad base64 decode".
  • 1
    Zerok, вы дважды проверили содержание вашего закрытого ключа? Это не выглядит достаточно долго
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню