blob: 2dd46ac878c5b06b14ef0941f40e68608ef9c7dc [file] [edit]
'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();
});