NodeJS和SSL – “密码读取错误”

节点无法为SSL通信创build安全上下文。

具体来说,我试图让远程通知在iOS上工作。 我使用了一个叫做node-apn的模块,它引发了这个错误:

Error: error:0906A068:PEM routines:PEM_do_header:bad password read at Error (native) at Object.createSecureContext (_tls_common.js:108:19) at Object.exports.connect (_tls_wrap.js:852:21) at apnSocket (/home/Slurp/node_modules/apn/lib/socket.js:56:19) at Connection.<anonymous> (/home/Slurp/node_modules/apn/lib/connection.js:188:17) at _fulfilled (/home/Slurp/node_modules/apn/node_modules/q/q.js:834:54) at self.promiseDispatch.done (/home/Slurp/node_modules/apn/node_modules/q/q.js:863:30) at Promise.promise.promiseDispatch (/home/Slurp/node_modules/apn/node_modules/q/q.js:796:13) 

这似乎是一个通用的错误,但并不真正与APN有关。

这是因为您在生成证书时已经指定了密码。 这是任何人想要使用它的密码。

将密码字段添加到凭证可以解决问题。

 var credentials = { key: fs.readFileSync('XXX.key', 'utf8'), cert: fs.readFileSync('XXX.crt', 'utf8'), passphrase: 'XXXX' } var httpsServer = https.createServer(credentials, app); 

以下命令将生成未encryption的密钥,因此您不需要提供密码:

 openssl rsa -in yourKey.key -out newKey.key 

这个命令会提示你input密码。

好的,我不知道究竟是哪里出了问题。 我怀疑密码。 遵循本指南,我获得了成功:

https://github.com/argon/node-apn/wiki/Preparing-Certificates