| 'use strict'; |
| const common = require('../common'); |
| |
| if (!common.hasCrypto) |
| common.skip('missing crypto'); |
| |
| const fixtures = require('../common/fixtures'); |
| const assert = require('assert'); |
| const tls = require('tls'); |
| |
| function loadPEM(n) { |
| return fixtures.readKey(`${n}.pem`); |
| } |
| |
| const serverOptions = { |
| key: loadPEM('agent2-key'), |
| cert: loadPEM('agent2-cert'), |
| ca: [ loadPEM('ca2-cert') ], |
| requestCert: true, |
| rejectUnauthorized: false, |
| }; |
| |
| let connections = 0; |
| |
| const server = tls.createServer(serverOptions, (c) => { |
| if (++connections === 3) { |
| server.close(); |
| } |
| if (c.servername === 'unknowncontext') { |
| assert.strictEqual(c.authorized, false); |
| return; |
| } |
| assert.strictEqual(c.authorized, true); |
| }); |
| |
| const secureContext = { |
| key: loadPEM('agent1-key'), |
| cert: loadPEM('agent1-cert'), |
| ca: [ loadPEM('ca1-cert') ], |
| }; |
| server.addContext('context1', secureContext); |
| server.addContext('context2', tls.createSecureContext(secureContext)); |
| |
| const clientOptionsBase = { |
| key: loadPEM('agent1-key'), |
| cert: loadPEM('agent1-cert'), |
| ca: [ loadPEM('ca1-cert') ], |
| rejectUnauthorized: false, |
| }; |
| |
| server.listen(0, common.mustCall(() => { |
| const client1 = tls.connect({ |
| ...clientOptionsBase, |
| port: server.address().port, |
| servername: 'context1', |
| }, common.mustCall(() => { |
| client1.end(); |
| })); |
| |
| const client2 = tls.connect({ |
| ...clientOptionsBase, |
| port: server.address().port, |
| servername: 'context2', |
| }, common.mustCall(() => { |
| client2.end(); |
| })); |
| |
| const client3 = tls.connect({ |
| ...clientOptionsBase, |
| port: server.address().port, |
| servername: 'unknowncontext', |
| }, common.mustCall(() => { |
| client3.end(); |
| })); |
| })); |