我正在我的登录端点上检查客户端证书。使用 Postman 等进行测试一切正常,但我无法使用我的 mocha/chai-http 单元测试运行它。
const ca = fs.readFileSync(path.join(__dirname, '..', process.env.SERVER_CERT_FILE));
const cert = fs.readFileSync(path.join(__dirname, '..', process.env.CLIENT_CERT_FILE));
const key = fs.readFileSync(path.join(__dirname, '..', process.env.CLIENT_KEY_FILE));
describe('POST /login', () => {
it('validates the certificate', (done) => {
chai.request(app)
.post('/api/login')
.ca(ca)
.key(key)
.cert(cert)
.send(userData)
.end((err: Error, res: any) => {
/* checks */
done();
});
});
我什至不能req.socket.getPeerCertificate()
那样做。有人知道这将如何工作吗?
我的登录控制器方法:
login = (req: any, res: any, next: any) => {
if (!req.client.authorized) {
sendJSONResponse(res, 'Missing or invalid client certificate', 401);
return;
}
/* .... */
}
我的服务器选项
const options = {
key: fs.readFileSync(process.env.SERVER_KEY_FILE),
cert: fs.readFileSync(process.env.SERVER_CERT_FILE),
requestCert: true,
rejectUnauthorized: false,
ca: [
fs.readFileSync(process.env.SERVER_CERT_FILE)
]
};
https.createServer(options, this.app).listen(port, () => {
/*...*/;
});