Ошибка HAPI SSL: 0906D06C: подпрограммы PEM: PEM_read_bio: нет начальной строки

У меня есть сервер Hapi, который отлично работает по HTTP. Мне нужно, чтобы это работало по HTTPS. У меня есть сертификат, который мы купили в COMODO.

Мой ключ

 -----BEGIN PRIVATE KEY-----
 MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDGyXFDz/pSzMxO
 ...
 g7N2PgtU9nhM7eYhQmhjB+4=
 -----END PRIVATE KEY-----

Мой сертификат

-----BEGIN CERTIFICATE-----
MIIFbDCCBFSgAwIBAgIRAK3oQPHzO66FR3iLafOh2JkwDQYJKoZIhvcNAQELBQAw
...
pvWiUJabAat2O+hexjv55O4RkfQ13aIKo1Z7VeWyNQdEPaSCOFtteC4a3WelWcZ7
-----END CERTIFICATE-----

(также пробовали это с комбинированным комплектом корневых сертификатов с той же проблемой)

Изменить: как сертификаты, так и ключ находятся в формате PEM, а не в формате DER. С окончанием строк тоже нет проблем.

Мой серверный код

var tls = {
    key: fs.readFileSync('privkey.pem'),
    cert: fs.readFileSync('certificate.pem')
};

var server = new Hapi.Server();

server.connection({
    address: '0.0.0.0',
    port: 443,
    tls: tls,
    routes: { cors: { origin: ['*'] }, validate: { options: { abortEarly: false } } }
});

Я получаю следующую ошибку при попытке запустить сервер

node server.js

Error: error:0906D06C:PEM routines:PEM_read_bio:no start line
    at Error (native)
    at Object.createSecureContext (_tls_common.js:87:19)
    at Server (_tls_wrap.js:754:25)
    at new Server (https.js:24:14)
    at Object.exports.createServer (https.js:44:10)
    at new module.exports.internals.Connection.options (W:\project\node_modules\hapi\lib\connection.js:89:74)
    at internals.Server.connection (W:\project\node_modules\hapi\lib\server.js:121:24)
    at Object.<anonymous> (W:\project\server.js:98:8)
    at Module._compile (module.js:398:26)
    at Object.Module._extensions..js (module.js:405:10)

Что здесь происходит? Как я могу это исправить? Любая помощь будет оценена. Спасибо


person Anomaly211    schedule 11.03.2016    source источник
comment
Вы объединили различные сертификаты вместе? support.comodo.com /index.php?/Default/Knowledgebase/Article/   -  person Matt Harrison    schedule 11.03.2016
comment
Возможно связано: stackoverflow.com/questions/20837161/   -  person Matt Harrison    schedule 11.03.2016
comment
Также попробуйте: stackoverflow.com/questions/31630544/   -  person Matt Harrison    schedule 11.03.2016
comment
Да, у меня есть сертификат конкатенации (я упоминал об этом выше как о связке комбинированного корневого сертификата из-за отсутствия лучшего термина), с использованием которого у меня возникает та же проблема.   -  person Anomaly211    schedule 11.03.2016
comment
Спасибо за ссылки. Я уже просмотрел оба. И сертификаты, и ключ находятся в формате PEM, а не в формате DER. С окончанием строк тоже нет проблем.   -  person Anomaly211    schedule 11.03.2016


Ответы (1)


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

Я протестировал ваш fs.readFileSync('server.key') (да, мой server.key в формате PEM) код, используя свой сертификат и ключ, и заметил, что без указания кодировки данные файла возвращались в виде массива байтов. <Buffer 2d 2d 2d 2d ....

Однако указание кодировки fs.readFileSync('server.key', 'utf-8') вернуло мне данные сертификата в виде удобочитаемой строки.

Я бы попробовал обновить ваши вызовы readFileSync, включив в них кодировку типа «utf-8» - это может быть причиной того, что hapi не может понять данные вашего сертификата.

Надеюсь это поможет!

person Mough    schedule 28.02.2019