crypto.createCredentials()
jest przestarzałe, więc użyj zamiast niego tls.createSecureContext()
.
tls.createServer() musi mieć w opcjach key
i cert
, ponieważ są one wymagane w instrukcji. Być może tls.createServer()
używa tych parametrów jako domyślnych w przypadku, gdy SNICallback
nie jest obsługiwane.
var secureContext = {
'mydomain.com': tls.createSecureContext({
key: fs.readFileSync('../path_to_key1.pem', 'utf8'),
cert: fs.readFileSync('../path_to_cert1.crt', 'utf8'),
ca: fs.readFileSync('../path_to_certificate_authority_bundle.ca-bundle1', 'utf8'), // this ca property is optional
}),
'myotherdomain.com': tls.createSecureContext({
key: fs.readFileSync('../path_to_key2.pem', 'utf8'),
cert: fs.readFileSync('../path_to_cert2.crt', 'utf8'),
ca: fs.readFileSync('../path_to_certificate_authority_bundle.ca-bundle2', 'utf8'), // this ca property is optional
}),
}
try {
var options = {
SNICallback: function (domain, cb) {
if (secureContext[domain]) {
if (cb) {
cb(null, secureContext[domain]);
} else {
// compatibility for older versions of node
return secureContext[domain];
}
} else {
throw new Error('No keys/certificates for domain requested');
}
},
// must list a default key and cert because required by tls.createServer()
key: fs.readFileSync('../path_to_key.pem'),
cert: fs.readFileSync('../path_to_cert.crt'),
}
https.createServer(options, function (req, res) {
res.end('Your dynamic SSL server worked!')
// Here you can put proxy server routing here to send the request
// to the application of your choosing, running on another port.
// node-http-proxy is a great npm package for this
}).listen(443);
} catch (err){
console.error(err.message);
console.error(err.stack);
}
Wewnątrz serwera można użyć nodejs pakiet http-proxy na trasie twoi https żądania do różnych zastosowań.
Chciałbym odpowiedzi na to również. Planuję zbudować aplikację Node.js, która może obsługiwać wiele domen z certyfikatem SSL dla każdego. Byłoby użyteczne, gdybyśmy mogli przechowywać informacje o certyfikatach SSL w bazie danych. Gdy wykryjemy domenę, z której pochodzą, możemy wyświetlić ich tematykę i treść. Wiem, że Node.js ma sposób zdefiniowania certyfikatu SSL na czas uruchamiania, ale nie zna sposobu, aby zrobić to dynamicznie w oparciu o domenę, na której się znajdują. – Keverw
nie jestem pewien, ale czy https://github.com/nodejitsu/node-http-proxy nie byłoby pomocne? –