加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

如何配置在Windows上运行的node.js以使用具有多个域名的多个SSL

发布时间:2020-12-13 21:25:49 所属栏目:Windows 来源:网络整理
导读:我已经阅读了这个问题并回答:“ Is it Possible to Dynamically Return an SSL Certificate in NodeJS?“…但它使用域和服务器的.key和.crt文件. 在Windows 2008 R2计算机上,我找不到domain1.key,server.key和server.crt文件.相反,我通过从IIS导出SSL证书创
我已经阅读了这个问题并回答:“
Is it Possible to Dynamically Return an SSL Certificate in NodeJS?“…但它使用域和服务器的.key和.crt文件.

在Windows 2008 R2计算机上,我找不到domain1.key,server.key和server.crt文件.相反,我通过从IIS导出SSL证书创建了domain1.pfx文件.

我能够成功运行一个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文件(对于domain1)作为服务器证书.

我试过像这样更改secureContext对象:

var secureContext = {
    'domain1': getSecureContext('domain1'),'domain2': getSecureContext('domain2'),.
    .
}

这给了我错误“听EACCES”.

在我的具体情况下,我有两个SSL证书.一个是一个域名的扩展验证证书,第二个是支持五个域名的多域证书.

我发现调试EACCES错误非常困难.关于导致EACCES的原因似乎没有更详细的说明.我的配置错了,证书有问题吗?我知道当我在同一台Windows 2008 R2服务器上运行IIS服务器(而不是node.js服务器)的IIS中使用它们时,这些证书可以正常工作.

我想继续使用纯Windows和node.js配置. (如果可能,不是nginx,iisnode或任何其他库).

解决了它. EACCES错误是由于我未列出需要使用这两个证书的所有站点.由于我在测试,我只使用两个站点名称,但多域证书包括一些其他站点.每个站点都需要列出如下.否则,一个或多个站点将没有与之关联的证书,从而导致EACCES错误.
var secureContext = {
    'domain1': getSecureContext('domain1'),'domain3': getSecureContext('domain2'),'domain4': getSecureCOntext('domain2')
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读