Skip to content

Commit

Permalink
feat: support SNI on TLS (#1055)
Browse files Browse the repository at this point in the history
Co-authored-by: ewan-chalmers <[email protected]>
  • Loading branch information
Yoseph Maguire and ewan-chalmers authored Feb 24, 2020
1 parent d764f02 commit f6534c2
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 1 deletion.
1 change: 1 addition & 0 deletions lib/connect/tls.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ function buildBuilder (mqttClient, opts) {
var connection
opts.port = opts.port || 8883
opts.host = opts.hostname || opts.host || 'localhost'
opts.servername = opts.host

opts.rejectUnauthorized = opts.rejectUnauthorized !== false

Expand Down
29 changes: 29 additions & 0 deletions test/secure_client.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ var KEY = path.join(__dirname, 'helpers', 'tls-key.pem')
var CERT = path.join(__dirname, 'helpers', 'tls-cert.pem')
var WRONG_CERT = path.join(__dirname, 'helpers', 'wrong-cert.pem')
var Server = require('./server')
var assert = require('chai').assert

var server = new Server.SecureServer({
key: fs.readFileSync(KEY),
Expand Down Expand Up @@ -153,5 +154,33 @@ describe('MqttSecureClient', function () {
done()
})
})

it.only('should support SNI on the TLS connection', function (done) {
var hostname, client
server.removeAllListeners('secureConnection') // clear eventHandler
server.once('secureConnection', function (tlsSocket) { // one time eventHandler
assert.equal(tlsSocket.servername, hostname) // validate SNI set
server.setupConnection(tlsSocket)
})


hostname = 'localhost'
client = mqtt.connect({
protocol: 'mqtts',
port: port,
ca: [fs.readFileSync(CERT)],
rejectUnauthorized: true,
host: hostname
})

client.on('error', function (err) {
done(err)
})

server.once('connect', function () {
server.on('secureConnection', server.setupConnection) // reset eventHandler
done()
})
})
})
})
4 changes: 3 additions & 1 deletion test/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ var MqttServer
var FastMqttServer
var MqttSecureServer

function setupConnection (duplex) {
var setupConnection = function (duplex) {
var that = this
var connection = new Connection(duplex, function () {
that.emit('client', connection)
Expand Down Expand Up @@ -91,3 +91,5 @@ MqttSecureServer = module.exports.SecureServer =
return this
}
inherits(MqttSecureServer, tls.Server)
MqttSecureServer.prototype.setupConnection = setupConnection

0 comments on commit f6534c2

Please sign in to comment.