![一个路由器上有两个树莓派 - SSL](https://linux22.com/image/1606192/%E4%B8%80%E4%B8%AA%E8%B7%AF%E7%94%B1%E5%99%A8%E4%B8%8A%E6%9C%89%E4%B8%A4%E4%B8%AA%E6%A0%91%E8%8E%93%E6%B4%BE%20-%20SSL.png)
我有以下内容:
外部 IP 地址为 209.xx.xx.xx 的路由器。此路由器将转发到第一个 rpi(rpi#1)的 IP 地址(端口 80 和 443 到 192.168.1.170)以及第二个 pi(rpi#2)的随机端口(1234)。
来自 noip.com 的域名通过 209.xx.xx.xx 转发到 rpi#1。我为 rpi#1 添加了 SSL(letsencrypt)。现在它是安全的(http -> https)。
我在同一个路由器上的 192.168.1.139 上安装了第二个 rpi (rpi#2)。路由器将端口 (1234) 转发到 rpi#2。这不安全 (http)。
一切运行良好。
现在:我想将 SSL 添加到 rpi#2。但是,由于 noip.com 只能转发到一个外部 IP 地址,因此我无法将 SSL 添加到 rpi#2。
非常感谢您的帮助。
答案1
选项 1:将其中一个 Rpi(或其他始终在线的设备)配置为 HTTP反向代理。(您可以使用标准的 Web 服务器,例如 Nginx 或 Apache httpd;只需为两个域创建 VirtualHosts 并启用代理。)
请注意,由于客户端仅与代理通信(而不是与最终服务器通信),因此必须在代理系统上配置所有 TLS 证书。代理→最终服务器连接可以使用纯 HTTP,也可以使用带有自定义证书的 HTTPS,这并不重要。
- 配置设备 A,将域 B 的纯 HTTP 代理到设备 B –除了对于
/.well-known/acme-challenge
路径,该路径仍应由设备 A 的 /var/www 或类似设备提供。 - 在设备 A 上配置您的 Let's Encrypt 客户端以获取两个域的证书。
- 配置设备 A 上的代理以使用新的 HTTPS 证书。
选项 2:将其中一个 Rpi(或其他始终在线的设备)配置为TLS SNI 代理。 这sniproxy程序可以用于此目的;HAproxy 可能也有类似的选项。
在这种方法中,TLS 将在各个服务器上终止 - 代理不需要解密实际数据。因此,每个服务器都需要从 Let's Encrypt 获取自己的证书。
然而,这仅有的与 TLSv1.2 纯文本 SNI 兼容 - 但无法轻易与 TLSv1.3 加密 SNI 兼容。