我完成了本地安装Nextcloud我在一台旧电脑上将其作为连接到 LAN 的服务器运行。我可以使用本地网络中服务器的私有 IP 地址直接访问它。我的问题是关于从本地网络外部访问它。
- 我在路由器上设置了端口转发。
- 并编写了一个小脚本,自动将我的路由器的公共 IP 上传到 git hub repo。
- 一切正常,我可以使用 HTTP 连接。但是如何通过HTTPS连接?
- 据我所知,我无法制作 SSL 证书,因为我没有域名。但是我可以做一个自签名的吗? 这足以确保连接安全吗?
笔记:
这个 Nextcloud 实例的所有用户都是我的朋友,所以他们不怕自签名 SSL 证书,我只希望它能建立正确的 HTTPS 连接。
我知道我可以使用 noip 我只是想尝试自己做。
答案1
证书将非对称密钥对绑定到主题。主题是密钥对所有者的名称。类型允许的名称定义在RFC 5280但对于 HTTPS 来说,它可以归结为域名、URI 或 IP 地址。
如果您没有域名(因此也没有 URI)或静态 IP(这大概就是您将公共 IP 地址上传到 GitHub 的原因),那么您就没有自签名证书可以证明的主题名称。
底线——您需要注册一个域名或获取一个静态 IP 地址。
但如果你必须尝试...
由于 ISP 不会经常更改路由器的 IP 地址,因此您可以向朋友颁发自签名证书,其中主体备用名称是 IP 地址,但这仅在路由器的 IP 地址更改之前有效。届时,您需要向朋友分发新的证书。
或者,你的朋友可以在他们的hosts 文件(这需要从 GitHub 更新 - 这是脚本的工作?)并且可以将其用作自签名证书的“主题备用名称”字段中的 DNS 名称。但是,虽然有时您可以在实验室环境中避免这种情况,但您不应该在互联网上这样做,因为您可能会无意中使用其他人的注册域名,然后您的所有朋友都看不到这个域名 - 如果您必须尝试这样做,请选择一个不太显眼的域名。
答案2
自签名证书的效力可能与公共证书一样强。
我认为存在误解;只有在使用 FQDN(而非 IP)时才可以使用带有证书的 HTTPS,因为证书是为特定域或 FQDN 而不是 IP 生成的。
我建议遵循此处的指南(从“在 Nextcloud 上启用 SSL”开始) https://www.howtoforge.com/tutorial/ubuntu-nginx-nextcloud/
关于拥有域名 - 不,它与 DuckDNS/No-IP/等相同。
关于安全:很复杂,哈哈
请注意,这里的整个对话仅涉及“加密流量”的主题,但信息和服务会暴露在互联网上。例如,如果您的朋友从公共 WIFI 使用该服务,如果您使用证书,伪造您的网站将变得更加困难。另一方面,如果有人攻击没有最新更新的 NextCloud 租户 - 那么您将被暴露并可能被黑客入侵。
你应该为您的家庭设置一个 VPN,为您的所有朋友创建用户,并且仅对 VPN 的端口进行端口转发,以实现更加安全的设置。
如果您的每个朋友都向他们的 ISP 申请静态 IP,那么您只会批准他们的请求,那就更好了。在我的国家,费用约为 2.5-3 美元(不到 1000Mb/100Mb 服务价格的 10% 哈哈)。