【发布时间】:2023-03-20 23:00:01
【问题描述】:
我已经阅读了这个问题和答案:“ 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 文件。
我能够使用这个 PFX 文件和一个域成功运行 https node.js 服务器,如下所示:
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 的原因似乎没有更多细节。我的配置有问题吗,证书有问题吗?我确实知道,当我在同一 Windows 2008 R2 服务器上运行 IIS 服务器(而不是 node.js 服务器)的 IIS 中使用这些证书时,它们可以正常工作。
我想保留纯 windows 和 node.js 配置。 (如果可能,不要使用 nginx、iisnode 或任何其他库)。
【问题讨论】:
-
你看过iisnode吗?
标签: windows node.js ssl https pfx