2015-06-20 116 views
21

节点无法为SSL通信创建安全上下文。NodeJS&SSL - “密码读取错误”

具体而言,我试图让远程通知在iOS上工作。我使用一个模块,叫节点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。

回答

47

这是因为您在生成证书时指定了密码短语。这是任何想使用它的人必须提供的密码。

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

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

var httpsServer = https.createServer(credentials, app); 
+0

这个密码短语是用来创建'.pem'还是'.crt'文件? – Sravan

+0

我认为它被用来创建.crt文件 –

+0

这解决了这个问题! –

4

以下命令将生成一个未加密的密钥,这样你就不会需要提供密码:

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

这个命令会提示你输入密码。