我正在尝试使用nodejs将一些数据发送到其他服务器。 Nodejs正在与https上的其他服务器通信,nodejs使用可用的根证书验证其他服务器的证书。要求是nodejs必须拒绝未经授权的那些。
我正在使用一些测试服务器测试上述设置。对于一个测试服务器,我创建了一个服务器证书,并使用openSSL由自签名CA证书“CA1.cer”签名。对于其他测试服务器,我跟第一个测试服务器一样,但是使用了makecert实用程序。
现在我在我的nodejs代码中包含了两个CA证书。问题是对于具有使用makecert实用程序创建的证书的测试服务器,nodejs失败。但是相同的代码适用于使用openSSL创建证书的测试服务器。
另一方面,两台服务器在浏览器上运行正常,没有任何证书错误。
我的nodejs选项如下,我的版本为v0.8.18:
var options = {
host: host,
port: port,
path: pathname,
method: 'POST',
ca: [ fs.readFileSync('./ca1.cer'), //created using OpenSSL
fs.readFileSync('./ca2.cer') ], // created using makecert util
agent: false,
requestCert: true,
rejectUnauthorized: true,
auth: cred,
headers: {
'Content-Type': 'text/xml',
'Content-Length': xmldata.length
}
};
请帮忙......
答案 0 :(得分:0)
要允许向服务器发出无效SSL证书的请求,请添加选项:
"rejectUnauthorized": false
答案 1 :(得分:0)
问题得到解决。从makecert util创建的证书不是.pem格式。转换为.pem后,上面的代码正常工作。感谢Andrei的支持。