澄清 SSL、DNS、网络服务器的交互

Clarifying interaction of SSL, DNS, webserver

请原谅这个问题的空泛性质,我不确定如何更好地表达它。

我有一个 nodejs 服务器,第三方将通过各种第三方 DNS 访问(HTTP + websockets),在他们的 DNS 条目中添加一个新的 A 记录指向我的 IP。我可以通过查看请求 headers 找到发起第三方 DNS 名称。然后节点充当代理并最终修改请求 headers/adding 元数据,然后将请求转发回第三方的另一个 url。

谁能解释一下当第三方证书是原始 DNS 的通配符证书时 SSL/TLS 是如何运作的;加密链如何传送到节点 -> 我是否需要在节点服务器上托管第三方证书的副本? (显然我宁愿不)。我可以使用第三方的原始 SSL 设置吗?

非常感谢!

DNS 和 HTTPS 在这里完全无关。客户端仅使用 DNS 来查找 Web 服务器的 IP 地址。之后,http 协议包含它在 Host header 中请求的主机名,正如您所确定的那样。

您的服务器需要为每个将处理请求的 Host 名称提供一个 HTTPS 证书,否则浏览器将无法与其建立可信连接。证书上写着 "This server is authorized to handle requests for this host name".

在实践中,虽然DNS和HTTPS是相关的,但是因为如果你控制了dns,你就可以颁发证书。 Let's Encrypt 设置起来非常简单。

我不建议与第三方共享证书,因为这可能会有点麻烦,而且如果您来回通过电子邮件发送私钥或其他方式,则更难保证私钥的安全。只需为您需要服务的 third-party 个域颁发您自己的证书。

对于像您这样的案例,我个人最喜欢的解决方案是 运行 caddy server instance in front of my app to manage https certificates automatically, and proxy requests to your node backend. It can even issue certs dynamically 因为它会收到请求。