I cannot use SNICallback

2019-08-11 02:52发布

问题:

I couldn't manage using SNICallback on createServerfunction. When I try the below codes I get an error as Missing PFX or certificate + pricate key.

How can I solve this issue?

var fs = require('fs'),
      tls = require('tls'),
      https = require('https');

var certs = {
    "safe.myDomain.com": {
        key: fs.readFileSync('../SSL/safe/private/key.pem'),
        cert: fs.readFileSync('../SSL/safe/certs/cert.pem') 
    },
    "api.myDomain.com": {
        key: fs.readFileSync('../SSL/api/private/key.pem'),
        cert: fs.readFileSync('../SSL/api/certs/cert.pem')   
    }
}

var httpsOptions = {
    SNICallback: function(hostname, cb) {
      var ctx = tls.createSecureContext(certs[hostname])
      cb(null, ctx])
    }
}

https.createServer(httpsOptions).listen(1443, function() {
    console.log('HTTPS server is listening on port 1443')
})

回答1:

The options to https.createServer must include key and cert as they are required. Even though that set won't be used if SNI provides a hostname.

See tls.createServer where it marks key and cert as required. (Linked from https.createServer.)



回答2:

SNICallback works great in NodeJS. I use it in production all the time. Here is a Stackoverlow answer with a detailed example of how to make it work.

Is it Possible to Dynamically Return an SSL Certificate in NodeJS?