Я проверяю сертификат клиента на моей конечной точке входа в систему. Тестирование с помощью 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, () => {
/*...*/;
});