'use strict'; const common = require('../common'); const fixtures = require('../common/fixtures'); // This test starts an https server and tries // to connect to it using a self-signed certificate. // This certificate“s keyUsage does not include the keyCertSign // bit, which used to crash node. The test ensures node // will not crash. Key and certificate are from #37889. // Note: This test assumes that the connection will succeed. if (!common.hasCrypto) common.skip('missing crypto'); const crypto = require('crypto'); // See #37990 for details on why this is problematic with FIPS. if (process.config.variables.openssl_is_fips) common.skip('Skipping as test uses non-fips compliant EC curve'); // This test will fail for OpenSSL < 1.1.1h const minOpenSSL = 269488271; if (crypto.constants.OPENSSL_VERSION_NUMBER < minOpenSSL) common.skip('OpenSSL < 1.1.1h'); const https = require('https'); const path = require('path'); const key = fixtures.readKey(path.join('selfsigned-no-keycertsign', 'key.pem')); const cert = fixtures.readKey(path.join('selfsigned-no-keycertsign', 'cert.pem')); const serverOptions = { key: key, cert: cert }; // Start the server const httpsServer = https.createServer(serverOptions, (req, res) => { res.writeHead(200); res.end('hello world\n'); }); httpsServer.listen(0); httpsServer.on('listening', () => { // Once the server started listening, built the client config // with the server“s used port const clientOptions = { hostname: '127.0.0.1', port: httpsServer.address().port, ca: cert }; // Try to connect const req = https.request(clientOptions, common.mustCall((res) => { httpsServer.close(); })); req.on('error', common.mustNotCall()); req.end(); });