我想检查(动态通过配置文件)客户端证书,但这不能正常工作。
如果我没有证书,我仍然可以访问该网站有时.
这是我的密码
服务器:
const { createServer } = require("https")
// config.ssl.client_crt = true or false
createServer({
cert: readFileSync(config.ssl.crt_file),
key: readFileSync(config.ssl.key_file),
requestCert: config.ssl.client_crt,
rejectUnauthorized: false,
ca: readFileSync(config.ssl.ca_file),
},app).listen(config.port)
app.get("/", (req, res) => {
authenticator.req_check(req, config.ssl.client_crt, function(ok) {
if (! ok) {
return res.send("nope")
}
return res.send("ok")
})
});
认证者:
module.exports = {
req_check(req, client_crt, cb) {
if (client_crt && req.client.authorized == false) { // <-- Pay attention!
return cb(false)
} else {
return cb(true)
}
}
}
这是可行的,但是当我这样写时,req.client.authorized
的值有时会被忽略
if (client_crt && ! req.client.authorized) {
return cb(false)
}
我认为是一样的,还是我错了?
当然我不希望任何人访问网站没有证书,所以我需要你的帮助,使检查绝对可靠
1条答案
按热度按时间lhcgjxsq1#
如果要强制执行客户端证书授权,则必须设置
rejectUnauthorized: true
。此外,在设置HTTPS连接时,甚至在第一个HTTPS请求通过该连接之前,都应该检查证书: