我有一个带有 HTTPS Web 门户的设备,该设备只有一个以太网端口。但是我无法将以太网电缆连接到设备所在的位置,但它可以接收 WiFi。
我计划使用带有以太网和 WiFi Nic 卡的树莓派或笔记本电脑。
我正在使用 eno1 和 wlp2s0 测试 Linux 笔记本电脑连接到 WiFi
我的 WiFi 网络是 192.168.1.x,设备在 192.168.4.x
我厌倦了使用 Nginx,这对于 HTTP 使用非常有用
server {
listen 80;
listen [::]:80;
server_name 192.168.1.80;
location / {
proxy_pass http://192.168.4.101/;
}
}
但是,要使用 HTTPS,我需要 SSL 证书。但是,我似乎无法为 IP 地址生成证书,而且 SSL 仅适用于该 Nginx 服务器。我想使用 Nginx 服务器将终止 HTTPS 请求,并且我想要连接的设备的 SSL 证书将无效。
Nginx 是实现此目的的正确技术吗?如果不是,我该用什么来做到这一点?
答案1
我无法将以太网电缆连接到设备所在的位置,但它能够接收 WiFi。
有许多产品可以连接到 Wi-Fi 网络并通过以太网提供访问,从而使以太网连接的设备直接位于同一 IP 子网上;它们通常作为“Wi-Fi 扩展器”或“无线网桥”出售。然而,我真的无法评价它们的可靠性。
(不幸的是,用 Linux 设备制作一个有点困难;对于近似于“真正桥接”的东西,它需要执行 ARPNAT/L2NAT,而我认为 iptables 或 ebtables 不能做到这一点?)
但是,要使用 HTTPS,我需要 SSL 证书。但是,我似乎无法为 IP 地址生成证书
您说该设备有一个 HTTPS Web 门户,很可能它已经有证书,这意味着 Nginx 也可以以同样的方式拥有证书。即使您生成了伪造的自签名证书,您仍然会最坏的情况和直接与设备使用 HTTPS 的情况一样,不会更糟。
因此,如果设备具有针对其 IP 地址的自签名证书,您实际上也可以为 Nginx 生成一个证书;如果设备具有针对“domain-not-filled-in.tld.invalid”的自签名证书,您也可以为 Nginx 生成一个证书。(如果您有内部 DNS – 您可以为域名生成证书,等等。)
如果您真的不关心 HTTPS,那么 Nginx 根本不需要证书;它充当 HTTP 代理(这就是它首先终止 SSL 的原因),因此它实际上可以在 HTTP 和 HTTPS 之间进行代理,反之亦然。只需将 proxy_pass 更改为 https:// URL,它就会通过 SSL 与设备通信,而无需自己的证书。
Nginx 是实现此目的的正确技术吗?如果不是,我该用什么来做到这一点?
在 iptables 或 nftables 中设置 DNAT 可能会更容易 - 即与路由器上的“端口转发”相同 - 这样整个 TCP 连接就可以端到端中继,而无需对 SSL 进行任何更改。您可以添加一个 DNAT 规则来重定向端口 443 的数据包,然后连接到 https://YourPi 将打开设备的接口,而无需任何额外的软件。
(但这意味着设备需要使用对 Pi 的 IP 地址有效的证书来终止 SSL,这可能不会改善情况。)