通常,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.com
为http://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.com
为http://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
。