这个测试程序连接到一个 https 服务器并获取一些内容。我已经在浏览器和 curl 中检查了我的服务器,并且证书工作正常。如果我运行 curl 从服务器获取数据,它会正确地抱怨证书未知,除非我使用 --cacert 传递它或使用 -k 关闭安全性。
所以我遇到的问题是,虽然我认为我的客户应该进行证书身份验证并且我告诉它公共证书在哪里,但它总是有效。如果我删除 ca: 选项,因此它不知道来自服务器的证书是什么,那么它会静默工作。我想捕捉身份验证错误,但我似乎做不到。
var https = require('https');
var fs = require('fs');
function main() {
var data = '';
var get = https.get({
path: '/',
host: 'localhost',
port: 8000,
agent: false,
ca: [ fs.readFileSync('https_simple/cacert.pem') ]
}, function(x) {
x.setEncoding('utf8');
x.on('data', function(c) {data += c});
x.on('error', function(e) {
throw e;
});
x.on('end', function() {
console.log('Hai!. Here is the response:');
console.log(data);
});
});
get.on('error', function(e) {throw e});
get.end();
}
main();