cis*_*iso 5 windows ssl https pfx node.js
我已经阅读了这个问题并回答:" 是否可以在NodeJS中动态返回SSL证书? "......但它使用域和服务器的.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);
Run Code Online (Sandbox Code Playgroud)
但是,如果我有一个多域证书加上单个域的另一个证书,那么如何配置SNICallback和getSecureContext函数以使每个域名使用正确的证书?
我认为两个PFX文件的服务器证书应该是相同的,因为它们在同一台服务器上,所以我只使用第一个PFX文件(对于domain1)作为服务器证书.
我试过像这样更改secureContext对象:
var secureContext = {
'domain1': getSecureContext('domain1'),
'domain2': getSecureContext('domain2'),
.
.
}
Run Code Online (Sandbox Code Playgroud)
这给了我错误"听EACCES".
在我的具体情况下,我有两个SSL证书.一个是一个域名的扩展验证证书,第二个是支持五个域名的多域证书.
我发现调试EACCES错误非常困难.关于导致EACCES的原因似乎没有更详细的说明.我的配置错了,证书有问题吗?我知道当我在同一台Windows 2008 R2服务器上运行IIS服务器(而不是node.js服务器)的IIS中使用它们时,这些证书可以正常工作.
我想继续使用纯Windows和node.js配置.(如果可能,不是nginx,iisnode或任何其他库).
解决了。EACCES 错误是由于我没有列出所有需要使用这两个证书的站点。由于我正在测试,我只使用两个站点名称,但多域证书包括一些其他站点。每个站点都需要如下列出。否则,一个或多个站点将没有与其关联的证书,从而导致 EACCES 错误。
var secureContext = {
'domain1': getSecureContext('domain1'),
'domain2': getSecureContext('domain2'),
'domain3': getSecureContext('domain2'),
'domain4': getSecureCOntext('domain2')
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1183 次 |
| 最近记录: |