tls: fix setting NPN protocols
The NPN protocols was set on `require('tls')` or `global` object instead of being a local property. This fact lead to strange persistence of NPN protocols, and sometimes incorrect protocol selection (when no NPN protocols were passed in client options). fix #6168
This commit is contained in:
Родитель
3546825b14
Коммит
1c3863abfd
|
@ -1321,12 +1321,13 @@ exports.connect = function(/* [port, host], options, cb */) {
|
||||||
|
|
||||||
var sslcontext = crypto.createCredentials(options);
|
var sslcontext = crypto.createCredentials(options);
|
||||||
|
|
||||||
convertNPNProtocols(options.NPNProtocols, this);
|
var NPN = {};
|
||||||
|
convertNPNProtocols(options.NPNProtocols, NPN);
|
||||||
var hostname = options.servername || options.host || 'localhost',
|
var hostname = options.servername || options.host || 'localhost',
|
||||||
pair = new SecurePair(sslcontext, false, true,
|
pair = new SecurePair(sslcontext, false, true,
|
||||||
options.rejectUnauthorized === true ? true : false,
|
options.rejectUnauthorized === true ? true : false,
|
||||||
{
|
{
|
||||||
NPNProtocols: this.NPNProtocols,
|
NPNProtocols: NPN.NPNProtocols,
|
||||||
servername: hostname,
|
servername: hostname,
|
||||||
cleartext: options.cleartext,
|
cleartext: options.cleartext,
|
||||||
encrypted: options.encrypted
|
encrypted: options.encrypted
|
||||||
|
|
|
@ -61,6 +61,12 @@ var clientsOptions = [{
|
||||||
crl: serverOptions.crl,
|
crl: serverOptions.crl,
|
||||||
NPNProtocols: ['c', 'b', 'e'],
|
NPNProtocols: ['c', 'b', 'e'],
|
||||||
rejectUnauthorized: false
|
rejectUnauthorized: false
|
||||||
|
},{
|
||||||
|
port: serverPort,
|
||||||
|
key: serverOptions.key,
|
||||||
|
cert: serverOptions.cert,
|
||||||
|
crl: serverOptions.crl,
|
||||||
|
rejectUnauthorized: false
|
||||||
},{
|
},{
|
||||||
port: serverPort,
|
port: serverPort,
|
||||||
key: serverOptions.key,
|
key: serverOptions.key,
|
||||||
|
@ -91,7 +97,9 @@ function startTest() {
|
||||||
connectClient(clientsOptions[0], function() {
|
connectClient(clientsOptions[0], function() {
|
||||||
connectClient(clientsOptions[1], function() {
|
connectClient(clientsOptions[1], function() {
|
||||||
connectClient(clientsOptions[2], function() {
|
connectClient(clientsOptions[2], function() {
|
||||||
server.close();
|
connectClient(clientsOptions[3], function() {
|
||||||
|
server.close();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -100,6 +108,8 @@ function startTest() {
|
||||||
process.on('exit', function() {
|
process.on('exit', function() {
|
||||||
assert.equal(serverResults[0], clientsResults[0]);
|
assert.equal(serverResults[0], clientsResults[0]);
|
||||||
assert.equal(serverResults[1], clientsResults[1]);
|
assert.equal(serverResults[1], clientsResults[1]);
|
||||||
assert.equal(serverResults[2], 'first-priority-unsupported');
|
assert.equal(serverResults[2], 'http/1.1');
|
||||||
assert.equal(clientsResults[2], false);
|
assert.equal(clientsResults[2], false);
|
||||||
|
assert.equal(serverResults[3], 'first-priority-unsupported');
|
||||||
|
assert.equal(clientsResults[3], false);
|
||||||
});
|
});
|
||||||
|
|
Загрузка…
Ссылка в новой задаче