2015-06-20 64 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 

這個命令會提示你輸入密碼。