我可以为 IP 地址获取 HTTPS 证书吗?

我可以为 IP 地址获取 HTTPS 证书吗?

好的,下面是用例:我构建了一个基于 DNS 的广告和内容拦截器。我已使用 dnsmasq 作为它的 DNS 转发器。如果用户尝试访问的域被列入黑名单,则 dnsmasq 会将该域解析为另一个 IP 地址,该 IP 地址托管一个 HTML 页面,该页面会通知用户限制。这适用于 http 域,但不适用于使用 https 和 hsts 的域。

答案1

是的,您可以为 IP 申请证书。不,它不会按您想要的方式工作,IP 必须是主机标头(https://192.0.2.10)。

如果你控制所有客户端,你可以重新签发所有拥有你控制的私有证书颁发机构的网站,类似于“内容管理员”之类的系统

答案2

如果您重定向用户(例如通过 DNS 重写),那么您试图做的就是创建一个(合法的)中间人 (MitM)。实际上,您是在假装成别人。

就 HTTPS 而言,没有适合所有人的解决方案。唯一可行的解​​决方案是使用自己的颁发证书即时创建证书(不是你可以将你的证书(即任何 CA 信任的证书)导入到你的所有客户端设备中(通过导入过程),这样它们就会把你的 MitM 视为有效的。

... 当然,HSTS 除外。当你执行此 MitM 操作时,你必须维护一个例外列表,或自动检测何时不执行 MitM,否则你将破坏使用 HSTS/证书固定的移动/银行应用程序等。

这就是大型下一代防火墙的作用(例如 FortiNet、Palo-Alto 等)。

然而,由于您说您正在使用基于 DNS 的方法,而不是解析到您假装的 IP 地址,因此您可以考虑将其重写为 0.0.0.0(或 IPv6 AAAA 记录的情况下为 ::)。这将导致连接立即失败。

这就像将以下内容放入您的 /etc/hosts 文件中一样。

0.0.0.0 backend1.example.com

如果我有一项服务(例如反向代理)想要与一个或多个后端通信,并且我需要快速移除其中一个后端(例如,可能是因为存在网络问题并且存在大量 ARP 超时),我会使用此技巧。它很好,因为它会导致底层“连接”请求在客户端本身上失败(无需网络 IO)。

相关内容