如何让 apt-cacher-ng 从 Apt HTTPS 存储库下载和缓存包?

如何让 apt-cacher-ng 从 Apt HTTPS 存储库下载和缓存包?

通常,Apt 软件包通过纯 HTTP 提供,下载的内容通过 GPG 签名进行验证。这使得apt-cacher-ng代理 HTTP 连接并将下载的包添加到其缓存中。

apt-cacher-ng 无法直接对 Apt 创建的 HTTPS 连接进行 MITM 攻击。配置要通过的 HTTPS 连接apt-cacher-ng,但内容不会被缓存——每次都会从远程服务器重新下载。当重建 Docker 容器并安装通过 HTTPS 提供的 Apt 存储库中的许多软件包时,这种情况很快就会变得令人讨厌。

有没有办法让 apt-cacher-ng 缓存从 HTTPS 存储库下载的包?

答案1

假设您的 apt-cacher-ng 服务的 URL 是http://localhost:3000,并且您将其存储在 bash 变量中${LOCAL_APT_CACHE_URL}

然后,您必须使用以下两个转换重写您的sources.list文件和目录文件:sources.list.d

HTTP

此命令将 Apt 存储库 URL 重写http://example.comhttp://localhost:3000/example.com

find /etc/apt/sources.list /etc/apt/sources.list.d/ \
-type f -exec sed -Ei 's!http://!'${LOCAL_APT_CACHE_URL}'/!g' {} \;

HTTPS

此命令将 处的 Apt 存储库重写https://example.comhttp://localhost:3000/HTTPS///example.com。apt-cacher-ng 接收 HTTP 请求,然后发起自己的 HTTPS 请求 - 无需任何 MITM 或直通。HTTPS 包已正确缓存。

find /etc/apt/sources.list /etc/apt/sources.list.d/ \
-type f -exec sed -Ei 's!https://!'${LOCAL_APT_CACHE_URL}'/HTTPS///!g' {} \;

对于稍后添加的任何新存储库,都必须进行这种转换 - 无论是通过直接修改sources.list还是通过类似的实用程序add-apt-repository

相关内容