| 'use strict'; |
| const common = require('../common'); |
| if (!common.hasCrypto) |
| common.skip('missing crypto'); |
| |
| const assert = require('assert'); |
| const tls = require('tls'); |
| const fixtures = require('../common/fixtures'); |
| |
| let finished = 0; |
| |
| function loadPEM(n) { |
| return fixtures.readKey(`${n}.pem`); |
| } |
| |
| const testCases = [ |
| { // agent8 is signed by fake-startcom-root with notBefore of |
| // Oct 20 23:59:59 2016 GMT. It passes StartCom/WoSign check. |
| serverOpts: { |
| key: loadPEM('agent8-key'), |
| cert: loadPEM('agent8-cert') |
| }, |
| clientOpts: { |
| ca: loadPEM('fake-startcom-root-cert'), |
| port: undefined, |
| rejectUnauthorized: true |
| }, |
| errorCode: 'CERT_REVOKED' |
| }, |
| { // agent9 is signed by fake-startcom-root with notBefore of |
| // Oct 21 00:00:01 2016 GMT. It fails StartCom/WoSign check. |
| serverOpts: { |
| key: loadPEM('agent9-key'), |
| cert: loadPEM('agent9-cert') |
| }, |
| clientOpts: { |
| ca: loadPEM('fake-startcom-root-cert'), |
| port: undefined, |
| rejectUnauthorized: true |
| }, |
| errorCode: 'CERT_REVOKED' |
| }, |
| ]; |
| |
| |
| function runNextTest(server, tindex) { |
| server.close(function() { |
| finished++; |
| runTest(tindex + 1); |
| }); |
| } |
| |
| |
| function runTest(tindex) { |
| const tcase = testCases[tindex]; |
| |
| if (!tcase) return; |
| |
| const server = tls.createServer(tcase.serverOpts, function(s) { |
| s.resume(); |
| }).listen(0, function() { |
| tcase.clientOpts.port = this.address().port; |
| const client = tls.connect(tcase.clientOpts); |
| client.on('error', function(e) { |
| assert.strictEqual(e.code, tcase.errorCode); |
| runNextTest(server, tindex); |
| }); |
| |
| client.on('secureConnect', function() { |
| // agent8 can pass StartCom/WoSign check so that the secureConnect |
| // is established. |
| assert.strictEqual(tcase.errorCode, 'CERT_REVOKED'); |
| client.end(); |
| runNextTest(server, tindex); |
| }); |
| }); |
| } |
| |
| |
| runTest(0); |
| |
| process.on('exit', function() { |
| assert.strictEqual(finished, testCases.length); |
| }); |