发送推送通知后,应用程序卡住“inputPEM密码”

我正在使用apn发送从node.js应用程序到苹果的推送通知。

我的代码:

// send to development**** var dev_cert_path = path.join(__dirname, '..', 'cert.pem'); var dev_key_path = path.join(__dirname, '..', 'key.pem'); var devOptions = { "gateway": "gateway.sandbox.push.apple.com" , "cert": dev_cert_path, "key": dev_key_path, "passphrase":'XXXXX'}; var devApnConnection = new apn.Connection(devOptions) , devMyDevice = new apn.Device(token) , devNote = new apn.Notification(); devNote.expiry = Math.floor(Date.now() / 1000) + 3600; // Expires 1 hour from now. devNote.badge = 3; devNote.sound = "xxx.aiff"; devNote.alert = message; devNote.payload = {'messageFrom': ''}; devApnConnection.pushNotification(devNote, devMyDevice); var options = { "batchFeedback": true, "interval": 1 }; var devFeedback = new apn.Feedback(options); devFeedback.on("feedback", function(devices) { devices.forEach(function(item) { logger.debug("device error : " + item.device); // Do something with item.device and item.time; }); }); devApnConnection.on('transmitted', function(res){ logger.debug("sent this message:"+JSON.stringify(devNote)+ " to this device: " + devMyDevice); }); devApnConnection.on('error', function(res){ logger.error("sending message failed to this device: " + devMyDevice + " data: " + JSON.stringify(res) ); }); } catch(e) {logger.error("Push notification error: ",e.message);} 

我的问题:

当发送一个请求到node.js,它发送一个推送通知,但我得到了许多Enter PEM pass phrase:在terminal:

 /projects/my_app$ node app.js POST /requests 200 14ms Enter PEM pass phrase: Enter PEM pass phrase: Enter PEM pass phrase: Enter PEM pass phrase: Enter PEM pass phrase: Enter PEM pass phrase: 

所以我的应用程序卡住,直到重新启动节点…任何想法?

编辑:

我试图从文件中删除密码:

 openssl rsa -in key.pem -out nopassword.pem 

但我仍然在应用程序控制台中得到这个 – 但是当按下input,它停止拍摄这个消息,直到下一个请求(在删除通行证之前,它显示了许多消息,直到重新启动应用程序,还单击input时,或密码)…

我发现了这个问题

我必须添加证书,密钥和密码短语的反馈选项。

 var options = { "batchFeedback": true, "interval": 300 }; var devFeedback = new apn.Feedback(options); devFeedback.on("feedback", function(devices) { devices.forEach(function(item) { logger.debug("device error : " + item.device); // Do something with item.device and item.time; }); }); 

选项应该是:

 var options = { "batchFeedback": true, "interval": 1, "production": false, "cert": dev_cert_path, "key": dev_key_path, "passphrase":'XXXXX' }; 

看起来您在生成私钥和CSR时遇到了密码挑战。 只要你知道密码,使用openssl将其删除到一个新的文件,你将需要使用。

 openssl rsa -in private.key -out private-wo.key -passin pass:<PASSWORD>