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