gpt4 book ai didi

ubuntu - 在没有 ca-certificates 包的情况下将受信任的 CA 添加到 ubuntu

转载 作者:行者123 更新时间:2023-12-04 19:28:09 29 4
gpt4 key购买 nike

问题:

  • 我想构建一个 docker 容器 FROM:ubuntu:20.04但我无法访问外部互联网
  • 我在内部网络上有一个 apt 镜像,可以使用
  • apt 镜像位于 https 后面,带有自定义证书
  • 我有自定义证书的 CA
  • 基本 ubuntu:20.04容器没有 ca-certificates包,所以我没有 update-ca-certificates可用命令

  • 到目前为止我做了什么:
  • 运行容器 (docker run -it --entrypoint /bin/bash ubuntu:20.04)
  • 在容器中,删除 apt 列表并将其替换为我的自定义 apt 存储库
     echo > /etc/apt/sources.list
    echo 'deb https://mycompany.internal.network/ubuntu-remote focal main restricted' >> /etc/apt/sources.list
    echo 'deb https://mycompany.internal.network/ubuntu-remote focal multiverse' >> /etc/apt/sources.list
    echo 'deb https://mycompany.internal.network/ubuntu-remote focal universe' >> /etc/apt/sources.list
    [.....]
  • 将 https 的根 CA 放在 /usr/local/share/ca-certificates/mycompany/

  • 从这里开始,如果可以的话,我会运行 update-ca-certificates一切都会奏效。我通过安装 ca-certificates 进行了测试事先打包,但是在将创建此容器的正确 CI 工作流程中,无法访问 ubuntu 上游 apt,因此我无法这样做,并且将定期重建以使镜像保持最新。
    如何在不使用 update-ca-certificates 的情况下使其信任内部仓库? 我发现的所有文章都指向这样做,但我做不到。

    最佳答案

    实际上,我想到了两种可能性。
    最简单的,但是最危险的方法是简单地禁用证书验证。
    比较成熟的安全解决方案将提供安装 ca-certificates 所需的 Debian 软件包存档。手动。
    禁用证书验证
    您可以通过 apt 自身的附加选项来实现这一点,无论是针对任何主机还是特定主机。您正在寻找的 APT 选项是 Acquire::https::Verify-Peer对于任何主机或Acquire::https::<host>::Verify-Peer仅针对特定主机。由于禁用任何主机的主机验证是甚至暂时一个潜在的危险行为,我建议使用特定于主机的变体 - 但是您确实应该知道您在 sources.list 中设置了哪些注册表主机文件。给定您的示例,该命令如下所示。

    apt-get -o Acquire::https::mycompany.internal.network::Verify-Peer=0 update
    由于这仅在此一次调用期间临时设置选项,因此您还必须在实际安装某些东西(可能是“ca-certificates”)时设置它,如下所示:
    apt-get -o Acquire::https::mycompany.internal.network::Verify-Peer=0 install ca-certificates
    您也可以在 apt.conf 中永久设置此选项。但我强烈反对这种方法(尤其是主机非特定变体),因为它会永久禁用 HTTPS 主机验证(对于一个甚至任何主机)——只要该选项位于您的 apt.conf 中。
    提供必要的 Debian 软件包存档
    这个解决方案不像第一个那样“简单”,但在完整性方面绝对是首选的解决方案,实际上并不难。你基本上要做的是,你会得到 ca-certificates 的 Debian 软件包存档 (*.deb)。以及它的依赖项,将它们复制到您的 docker 容器并通过 dpkg 安装它们.
    虽然第一步(获取 .deb 的 Debian 软件包存档( ca-certificates))似乎也相当容易,但获取所有必需的依赖项是一项更困难的任务 - 至少如果您没有等效的“目标”操作系统”,即 Ubuntu 20.04。但是如果你有,你基本上可以运行以下命令来下载所有 .deb用于将特定包安装到当前工作目录中。
    apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances ca-certificates | grep "^\w")
    然后,您可以在 docker build 期间将文件复制到容器中。或稍后绑定(bind)挂载它们 - 无论哪种方式,您都希望通过更改到包含所有 .deb 的目录来简单地(尝试)安装所有它们。容器上下文中的文件和问题:
    dpkg -i *
    dpkg可能会注意到一些软件包已经安装并跳过这些。
    就像已经提到的,这只有在目标容器操作系统与正在下载包的操作系统匹配时才能正常工作。如果不是这种情况,您基本上可以通过 Ubuntu package registry index 手动解决和下载包依赖项。 .
    结论
    无论选择何种解决方案,您最终都会获得 ca-certificates 的有效安装。 .

    关于ubuntu - 在没有 ca-certificates 包的情况下将受信任的 CA 添加到 ubuntu,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69089575/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com