NodeJS - Невозможно прикрепить сертификат клиента для тестирования с Mocha / Chai-Http - PullRequest
0 голосов
/ 25 января 2019

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

1 Ответ

0 голосов
/ 10 мая 2019

Вам необходимо использовать module.exports для объекта прослушивателя https. У меня была точно такая же проблема, и я решил внести изменения ниже. Надеюсь, это поможет.

module.exports = https.createServer(options, app)
  .listen(443, function () {
    console.log('HTTPS App listening on port 443! Go to https://localhost:443/')
  })
...