我有一台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)
发生了什么事?我该如何解决? 任何帮助,将不胜感激。 感谢
答案 0 :(得分:0)
我遇到了类似的问题,我的配置不同,因为我以字符串形式提供证书和密钥(仅开发人员)。我遇到了同样的错误,因为我从一个文本编辑器线性化了我的密钥,该文本编辑器删除了新行(\ n)字符。一旦将这些\ n字符添加回字符串中,它就可以正常工作。这让我开始思考您的问题。...
我使用我的证书和密钥测试了您的fs.readFileSync('server.key')
(是,server.key是PEM格式)代码,我注意到,没有指定编码,文件数据就以字节数组形式返回。
<Buffer 2d 2d 2d 2d ....
但是,指定编码fs.readFileSync('server.key', 'utf-8')
确实将证书数据作为人类可读的字符串返回给我。
我会尝试更新您的readFileSync调用以包含类似“ utf-8”的编码-这可能就是为什么hapi无法理解您的证书数据的原因。
希望这会有所帮助!