我可以让 Firefox 自动信任给定主机名/IP/范围的自签名证书吗?

我可以让 Firefox 自动信任给定主机名/IP/范围的自签名证书吗?

我正在使用一个 Docker 容器,该容器每次启动时都会使用新的自签名证书托管一个网站。我可以告诉 Firefox 每次重新生成证书并访问该网站时为该证书添加一个例外,但这需要点击几次,这有点烦人。

我无法更改证书生成的行为,因此我认为可能有一种方法可以告诉 Firefox 始终信任来自此 IP(或主机名、子网等)的自签名证书,甚至可以完全禁用此主机的证书验证。我在网上找不到类似的东西,所以我来到这里。对此有什么想法吗?

答案1

做这个 :

  • 运行 Firefox

  • 定位至设置 > 隐私和安全

  • 在证书下,单击“查看证书...”

  • 在证书管理器中,单击颁发机构选项卡

  • 单击导入按钮导入您的证书

  • 导入证书时可能会提示您设置信任级别。如果没有,您可以通过“编辑信任”按钮手动进行设置。

  • 重新启动 Firefox。

答案2

更简单的解决方案是配置 docker,这样容器就不需要重新创建证书了。只要容器没有主动针对它工作,这也适用于基本容器设置:

  • 识别正在运行的容器内存储证书的目录或文件,例如<cert-path-in-container>
  • 在docker主机上创建持久存储,例如mkdir -p /var/lib/my-container/cert/
  • 在容器启动时,在容器中映射持久存储docker run [...] --volume /var/lib/my-container/cert:<cert-path-in-container>

也可以看看:https://docs.docker.com/storage/volumes/

答案3

我找到了一个适合我的解决方案。它并不完美,但看起来已经足够好了,而且应该比全局禁用证书验证更安全。以下是我所做的:

  1. 安装mitmproxy
  2. 跑步mitmdump --mode reverse:https://<IP assigned to docker container> --set ssl_insecure=true

这样我就可以连接到 https://<host IP>:8080,它将提供网站服务,但有一个重要的区别,即 mitmproxy 使用固定的根 CA,我信任 Firefox。现在,当我重新启动容器并重新生成证书时,这并不重要,因为 mitmproxy 会忽略上游证书错误,并且我已将 Firefox 设置为信任 mitmproxy 根 CA。

唯一剩下的问题是 mitmproxy 似乎根据容器的主机名选择最终证书的主机名,因此 Firefox 访问 <主机 IP> 与 mitmproxy 生成的证书中的主机名不匹配。每次我重新启动 mitmproxy 并重新生成最终证书时,我都必须告诉 Firefox 为不匹配添加一个例外。

我通过编辑 hosts 文件来强制 <container hostname> 解析为 <host IP>,并将 <container hostname> 添加到network.trr.excluded-domainsabout:config 中的列表中,以便 Firefox 可以使用 hosts 文件中为该域指定的 IP。现在我可以连接到 https://<container hostname>:8080,并且 URI 中的主机名与证书中的主机名匹配,无论我重新启动 mitmproxy 或容器多少次,一切都很顺利。

这有点像黑客行为,但确实有效!如果有人能想到更优雅的解决方案,我仍然愿意接受。

相关内容