Прочетох този въпрос и отговора: " Възможно ли е динамично връщане на SSL сертификат в NodeJS?"... но той използва .key и .crt файлове за домейните и сървъра.
На машина с Windows 2008 R2 не мога да намеря файловете domain1.key, server.key и server.crt. Вместо това създадох файл domain1.pfx, като експортирах SSL сертификата от IIS.
Мога успешно да стартирам https node.js сървър, използвайки този един PFX файл с един домейн по следния начин:
var fs = require('fs');
var https = require('https');
var crypto = require('crypto');
function getSecureContext(domain) {
return crypto.createCredentials({
pfx: fs.readFileSync('/path/to/' + domain + '.pfx'),
passphrase: 'passphrase'
}).context
}
var secureContext = {
'domain1': getSecureContext('domain1')
}
var options = {
SNICallback: function (domain) {
return (secureContext.hasOwnProperty(domain) ? secureContext[domain] : {});
},
pfx: fs.readFileSync('/path/to/domain1.pfx'); // for the server certificate
};
var server = https.createServer(
options,
requestListener).listen(443);
Но какво ще стане, ако имам сертификат за множество домейни плюс друг сертификат за един домейн, как функциите SNICallback и getSecureContext ще бъдат конфигурирани така, че всяко име на домейн да използва правилния сертификат?
Мисля, че сертификатът на сървъра трябва да е един и същ и за двата PFX файла, тъй като те са на един и същ сървър, така че използвам само първия PFX файл (за домейн1) като сертификат на сървъра.
Опитах се да променя обекта secureContext по този начин:
var secureContext = {
'domain1': getSecureContext('domain1'),
'domain2': getSecureContext('domain2'),
.
.
}
Това ми дава грешката „listen EACCES“.
В моята конкретна ситуация имам два SSL сертификата. Единият е сертификат за разширено валидиране за едно име на домейн, а вторият е сертификат за множество домейни, поддържащ пет имена на домейни.
Открих, че е много трудно да отстраня грешката на EACCES. Изглежда, че няма повече подробности за това какво причинява EACCES. Грешна ли е конфигурацията ми, има ли проблем със сертификатите? Знам, че тези сертификати работят правилно, когато ги използвам в IIS, работещ с IIS сървър (вместо node.js сървър) на същия Windows 2008 R2 сървър.
Бих искал да остана с чист windows и node.js конфигурация. (Не nginx, iisnode или други библиотеки, ако е възможно).