Share SSL context between server connections

Fixes #1073.
This commit is contained in:
Fedor Indutny 2011-05-20 02:42:13 +07:00 committed by Ryan Dahl
parent 6461af1baa
commit 21724ecaec
2 changed files with 30 additions and 17 deletions

View File

@ -36,7 +36,7 @@ try {
}
function Credentials(secureProtocol) {
function Credentials(secureProtocol, context) {
if (!(this instanceof Credentials)) {
return new Credentials(secureProtocol);
}
@ -45,22 +45,28 @@ function Credentials(secureProtocol) {
throw new Error('node.js not compiled with openssl crypto support.');
}
this.context = new SecureContext();
if (secureProtocol) {
this.context.init(secureProtocol);
if (context) {
this.context = context;
this.reuseContext = true;
} else {
this.context.init();
}
this.context = new SecureContext();
if (secureProtocol) {
this.context.init(secureProtocol);
} else {
this.context.init();
}
}
}
exports.Credentials = Credentials;
exports.createCredentials = function(options) {
exports.createCredentials = function(options, context) {
if (!options) options = {};
var c = new Credentials(options.secureProtocol);
var c = new Credentials(options.secureProtocol, context);
if (context) return c;
if (options.key) c.context.setKey(options.key);

View File

@ -713,16 +713,23 @@ function Server(/* [options], listener */) {
var self = this;
// Handle option defaults:
this.setOptions(options);
var sharedCreds = crypto.createCredentials({
key: self.key,
cert: self.cert,
ca: self.ca,
ciphers: self.ciphers,
secureProtocol: self.secureProtocol,
crl: self.crl
});
sharedCreds.context.setCiphers('RC4-SHA:AES128-SHA:AES256-SHA');
// constructor call
net.Server.call(this, function(socket) {
var creds = crypto.createCredentials({
key: self.key,
cert: self.cert,
ca: self.ca,
secureProtocol: self.secureProtocol,
crl: self.crl
});
creds.context.setCiphers('RC4-SHA:AES128-SHA:AES256-SHA');
var creds = crypto.createCredentials(null, sharedCreds.context);
var pair = new SecurePair(creds,
true,