gpt4 book ai didi

node.js - Node 。根据访问的 IP 服务提供不同的自签名证书

转载 作者:行者123 更新时间:2023-12-04 22:39:17 24 4
gpt4 key购买 nike

我正在 nodejs 中实现 https 服务器,它应该可以从本地 IP 地址和通过 SSL 的公共(public) IP 地址访问。在文档的帮助下(以及关于 SO 的一些答案),我发现了如何为不同的主机名动态提供不同的证书(使用 SNICallback),但作为文档点,SNICallback 仅适用于主机名而不适用于 IP:

Currently, the only server names supported are DNS hostnames LiteralIPv4 and IPv6 addresses are not permitted in "HostName"


下面是一些如何创建服务器的代码:
    var certs = {
'intern': {
key: fs.readFileSync(keyName, 'utf8'),
cert: fs.readFileSync(certName, 'utf8')
},
'extern': {
key: fs.readFileSync(keyNameExternal, 'utf8'),
cert: fs.readFileSync(certNameExternal, 'utf8')
}
}


var httpsOpts = {
SNICallback: function (hostname, cb) {
if (hostname === 'mydomain.com') {
var ctx = tls.createSecureContext(certs['extern'])
cb(null, ctx)
}
},
key: fs.readFileSync(keyName, 'utf8'),
cert: fs.readFileSync(certName, 'utf8')
}

httpsServer = https.createServer(httpsOpts, httpsApp)
httpsServer.listen(443, '0.0.0.0', onlisteningHttps)
当本地 IP '192.168.1.100' 访问服务器时,是否有可能提供 certs['intern'] 证书
并在通过公共(public) IP(不是主机名)访问服务器时提供 certs['extern'] 证书?

最佳答案

只有当您的服务器有两个独立的内部和外部网络接口(interface)时才有可能。
第二个参数为httpsServer.listen实际上是绑定(bind)接口(interface)。例如,假设您在 192.168.1.100 有一个“内部”接口(interface),您可以这样做:

  httpsServerInt = https.createServer(certs.intern, httpsApp)
httpsServerExt = https.createServer(certs.extern, httpsApp)
httpsServerInt.listen(443, '192.168.1.100', onlisteningHttps)
httpsServerExt.listen(443, '0.0.0.0', onlisteningHttps)
如果服务器没有单独的接口(interface),您可以查看“linux 虚拟接口(interface)”(如果是这种情况,可以查看 windows)

关于node.js - Node 。根据访问的 IP 服务提供不同的自签名证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64065779/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com