forked from LeenkxTeam/Kmake
64 lines
1.7 KiB
JavaScript
64 lines
1.7 KiB
JavaScript
|
|
'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();
|
|||
|
|
});
|