使用运行时配置创建/配置 DNS 服务器

使用运行时配置创建/配置 DNS 服务器

我有一个大型 Windows 视频/音频应用程序,可以通过 Web 服务器进行远程控制。为此,我可以监听 192.168.1.10 系统中的本地端口到端口 8000,通过 NAT 转发端口,并让远程浏览器连接到http://public.ip:8000

现在的问题是,要使用某些功能(例如麦克风录音或 QUIC 访问),我需要 https。这将不可避免地导致浏览器发出自签名证书的警告。

我想到了一个可能的解决方案。我可以为自己获取一个便宜的域名,该域名可以在我的 Centos 7 服务器上有一个名称服务器,例如 example.xyz。然后对于拥有公共 IP 1.2.3.4 并想要启用 Web https 服务器的用户,我可以配置一个子域 1.2.3.4.example.xyz,它可以指向 1.2.3.4 IP,然后让 letsencrypt 立即为该服务器生成证书,将其传递给用户,现在 https 连接就可以使用了。

上述推理有效吗?我是否可以通过某种方式(例如,通过 PHP 脚本)控制/自动化生成指向特定 IP 的子域并调用 letsencrypt 来生成证书?

答案1

好的。如果我没记错的话,您有一群用户,每个用户都可以以某种方式触发“服务器”中的常规浏览器,然后该浏览器会进入用户的系统,以从用户那里获取 Web 数据。并且您需要用户的机器支持具有有效证书的 SSL 连接。我假设您已经弄清楚了如何通过用户的防火墙入站...

您建议的方法是创建一个您自己的公共 DNS 服务器,然后使用它来发布您自己的域的 A 记录example.xyz,以及每个用户的动态1.2.3.4.example.xyz地址,然后您将使用 LetsEncrypt 生成证书。当然,要生成该证书,您要么需要在用户的计算机上创建一个具有指定名称的 Web 目标,要么为指定的地址创建一个 DNS 条目,以便 LetsEncrypt 服务器能够识别出您拥有该域。我假设您将使用您的私有 DNS 服务器来进行后者……当然,您必须将生成的私钥/公钥对返回到用户的计算机,除非您在用户的计算机上进行 LetsEncrypt 设置。

我的观点是,这样做虽然可行,但速度会很慢。我自己的经验表明,最安全的做法是让 DNS 等待 10 秒钟才能在 LetsEncrypt 服务器上可用;使用创建 Web 目标的技术会更快,大约需要一秒钟,但您仍然会遇到 DNS 传播问题,因为您必须为用户的计算机生成 DNS 条目,并将其提供给 LetsEncrypt,这样他们才能看到 Web 目标。

作为替代方案,我的建议是创建一个通配符证书*.example.xyz。当用户1.2.3.4进入时,您1_2_3_4.example.xyz在 DNS 中创建一个 DNS 条目,并将该通配符证书的私钥和公钥传输给您的用户。然后,您的用户使用这些密钥启动他们的 Web 服务器,您就可以开始工作了。

答案2

我很困惑。为什么要为每个客户端创建一个证书?通常,您只需要为服务器创建一个证书,然后将服务器的公钥提供给客户端,该公钥将保存在您的名义 Web 服务器上。最简单的解决方案是购买您的域名example.xyz,将其指向您的公共 IP,将 80 和 443 端口转发到内部 Web 服务器,使用 LetsEncrypt 获取证书,然后将该证书放在您需要的位置,以便需要 HTTPS 的功能可以使用该证书。只需执行一次,每个致电的人都可以享受 3 个月的服务。

相关内容