我不能使用 SNICallback

I cannot use SNICallback

我无法在 createServer 函数上使用 SNICallback。 当我尝试以下代码时,出现 Missing PFX or certificate + pricate key.

错误

我该如何解决这个问题?

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')
})

https.createServer 的选项必须包含 keycert,因为它们是必需的。即使如果 SNI 提供主机名也不会使用该集合。

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

SNICallback 在 NodeJS 中运行良好。我一直在生产中使用它。这是一个 Stackoverlow 答案,其中包含有关如何使其工作的详细示例。

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