Last active
December 19, 2015 18:39
-
-
Save bajtos/6000596 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Set this to the directory where you have node sources | |
// The test uses node's test certificates for the TLS server | |
var PATH_TO_NODE_SOURCES = '/Users/bajtos/src/node'; | |
/** Usage ** | |
1. Start a SSL server in terminal 1 | |
$ openssl s_server -cert test_cert.pem -key test_key.pem | |
(..lots of SSL logs..) | |
2. Run the client in terminal 2 - don't reuse sessions | |
$ node client.js | |
session reused: false | |
3. Run the client again and reuse sessions | |
$ node client.js reuse | |
session reused: true | |
*/ | |
// IMPLEMENTATION | |
var fs = require('fs'); | |
var path = require('path'); | |
var tls = require('tls'); | |
var cert_dir = path.resolve(PATH_TO_NODE_SOURCES, 'test', 'fixtures'); | |
var reuse = process.argv.some(function(a) { return a === 'reuse'; }); | |
function makeConnections(num, session) { | |
var opts = { | |
port: 4433, | |
ca: [ fs.readFileSync(cert_dir + '/test_ca.pem') ], | |
}; | |
if (reuse) | |
opts.session = session; | |
var conn = tls.connect(opts, function() { | |
conn.end(); | |
if (num > 1) { | |
makeConnections(num-1, conn.getSession()); | |
} else { | |
console.log('session reused:', conn.isSessionReused()); | |
} | |
}); | |
} | |
makeConnections(2); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Set this to the directory where you have node sources | |
// The test uses node's test certificates for the TLS server | |
var PATH_TO_NODE_SOURCES = '/Users/bajtos/src/node'; | |
// Set to 'SSLv3_method' to enable session resumption | |
var SECURE_PROTOCOL;// = 'SSLv3_method'; | |
// IMPLEMENTATION | |
var fs = require('fs'); | |
var path = require('path'); | |
var tls = require('tls'); | |
var cert_dir = path.resolve(PATH_TO_NODE_SOURCES, 'test', 'fixtures'); | |
var options = { | |
key: fs.readFileSync(cert_dir + '/test_key.pem'), | |
cert: fs.readFileSync(cert_dir + '/test_cert.pem'), | |
ca: [ fs.readFileSync(cert_dir + '/test_ca.pem') ] | |
}; | |
var port; | |
var sessionSaved = false; | |
var sessionResumed = false; | |
server = tls.createServer(options, onConnection); | |
server.on('newSession', saveSession); | |
server.on('resumeSession', resumeSession); | |
server.listen(0, onListening); | |
var sessionStore = {}; | |
function saveSession(id, data) { | |
sessionStore[id] = data; | |
sessionSaved = true; | |
} | |
function resumeSession(id, cb) { | |
var data = sessionStore[id] || null; | |
sessionResumed = !!data; | |
cb(null, data); | |
} | |
function onListening(addr) { | |
port = server.address().port; | |
makeConnections(2); | |
} | |
function onConnection(c) { | |
c.end(); | |
} | |
function makeConnections(num, session) { | |
var opts = { | |
port: port, | |
ca: [ fs.readFileSync(cert_dir + '/test_ca.pem') ], | |
secureProtocol: SECURE_PROTOCOL, | |
session: session | |
}; | |
var conn = tls.connect(opts, function() { | |
conn.end(); | |
if (num > 1) { | |
makeConnections(num-1, conn.getSession()); | |
} else { | |
console.log('session saved: %s resumed: %s', sessionSaved, sessionResumed); | |
server.close(); | |
} | |
}); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment