'use strict'; const common = require('../common'); if (!common.hasCrypto) common.skip('node compiled without crypto.'); const fixtures = require('../common/fixtures'); // This test ensures that TLS does not fail to read a self-signed certificate // and thus throw an `authorizationError`. // https://github.com/nodejs/node/issues/5100 const assert = require('assert'); const tls = require('tls'); const pfx = fixtures.readKey('agent1.pfx'); const server = tls .createServer( { pfx: pfx, passphrase: 'sample', requestCert: true, rejectUnauthorized: false }, common.mustCall(function(c) { assert.strictEqual(c.getPeerCertificate().serialNumber, 'ECC9B856270DA9A8'); assert.strictEqual(c.authorizationError, null); c.end(); }) ) .listen(0, function() { const client = tls.connect( { port: this.address().port, pfx: pfx, passphrase: 'sample', rejectUnauthorized: false }, function() { for (let i = 0; i < 10; ++i) { // Calling this repeatedly is a regression test that verifies // that .getCertificate() does not accidentally decrease the // reference count of the X509* certificate on the native side. assert.strictEqual(client.getCertificate().serialNumber, 'ECC9B856270DA9A8'); } client.end(); server.close(); } ); });