Я прочитал этот вопрос и ответ: " Возможно ли динамически возвращать 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'),
.
.
}
Это дает мне ошибку «слушай EACCES».
В моей конкретной ситуации у меня есть два сертификата SSL. Один — это сертификат расширенной проверки для одного доменного имени, а второй — сертификат для нескольких доменов, поддерживающий пять доменных имен.
Мне было очень сложно отладить ошибку EACCES. Кажется, нет более подробной информации о том, что вызывает EACCES. Моя конфигурация неверна, проблема с сертификатами? Я знаю, что эти сертификаты работают правильно, когда я использую их в IIS, работающем на сервере IIS (вместо сервера node.js) на том же сервере Windows 2008 R2.
Я хотел бы остаться с чистой конфигурацией Windows и node.js. (Не nginx, iisnode или любые другие библиотеки, если это возможно).