NodeJS& SSL - "密码读取错误"

时间:2015-06-20 19:02:56

标签: node.js ssl https certificate

节点未能为SSL通信创建安全上下文。

具体来说,我试图让远程通知在iOS上运行。我使用一个名为node-apn的模块,它抛出了这个错误:

{
    "_id" : 1,
    "from" : "a",
    "to" : "b",
    "message" : "a to b",
    "createdAt" : ISODate("2015-06-06T16:42:32.789Z"),
    "updatedAt" : ISODate("2015-06-06T16:42:32.789Z")
}
{
    "_id" : 2,
    "from" : "a",
    "to" : "c",
    "message" : "a to c",
    "createdAt" : ISODate("2015-06-06T16:43:32.789Z"),
    "updatedAt" : ISODate("2015-06-06T16:43:32.789Z")
}
{
    "_id" : 3,
    "from" : "b",
    "to" : "c",
    "message" : "b to c",
    "createdAt" : ISODate("2015-06-06T16:44:32.789Z"),
    "updatedAt" : ISODate("2015-06-06T16:44:32.789Z")
}
{
    "_id" : 4,
    "from" : "a",
    "to" : "c",
    "message" : "a to c2",
    "createdAt" : ISODate("2015-06-06T16:45:32.789Z"),
    "updatedAt" : ISODate("2015-06-06T16:45:32.789Z")
}
{
    "_id" : 5,
    "from" : "b",
    "to" : "c",
    "message" : "b to c2",
    "createdAt" : ISODate("2015-06-06T16:46:32.789Z"),
    "updatedAt" : ISODate("2015-06-06T16:46:32.789Z")
}

这似乎是一般性错误,并且与APN没有特别关联。

3 个答案:

答案 0 :(得分:78)

这是因为您在生成证书时指定了密码。这是一个必须由想要使用它的人提供的密码。

在凭证中添加密码短语可以解决问题。

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

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

答案 1 :(得分:8)

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

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

此命令将提示您输入密码。

答案 2 :(得分:0)

使用它们生成pem。

openssl genrsa -out server-key.pem 1024 openssl req -new -key server-key.pem -out server-csr.pem openssl x509 -req -in server-csr.pem -signkey server-key.pem -out server-cert.pem