如何在Docker容器中使用GnuPG,因为它缺少熵?

Mic*_*vko 10 gnupg entropy openpgp docker

我需要对apt存储库进行docker化.其中的包需要签名,目前已完成 aptly publish snapshot -distribution="stable" -gpg-key="<key id>" my-snapshot

在此之前,需要使用创建密钥gpg --gen-key.

但是这样私有密钥将在docker镜像中创建,这似乎不是一个好习惯.此外,id甚至不起作用; 跑步gpg --gen-key --batch <gpg.in卡住了:

Not enough random bytes available.  Please do some other work to give
the OS a chance to collect more entropy! (Need 284 more bytes)
Run Code Online (Sandbox Code Playgroud)

我不知道是否甚至可以在docker容器中生成一个gpg密钥,即使它是,也可能不是一个好主意.

有没有办法通过外部密钥签署回购的内容?

Jen*_*rat 7

缺失熵

泊坞窗并不能提供一个虚拟/dev/[u]random设备。如果容器中没有足够的熵,那么主机上的熵就不足。

检查 的内容/proc/sys/kernel/random/entropy_avail,它们在 Docker 主机和容器上应该几乎相同(如果数字略有不同,它只是变化非常频繁,否则重新检查几次)。

可能的原因:

  • 在虚拟机中运行 docker 主机,例如因为boot2docker或自建虚拟机。只要确保在您的虚拟机中获得更多的熵,havegd对于开发者机器来说是一个非常简单的解决方案,但可能不适合生产。
  • 另一个容器/应用程序正在耗尽所有熵。意识到哪一个并中断/终止它,或者产生更多的熵。
  • 您通常没有足够的熵。做一些工作(鼠标/键盘移动,(硬盘)磁盘 I/O)。

外部生成密钥对

无论如何,在真机上生成密钥,只将(私有)子密钥移动到服务器上可能更合理。这样,您可以时不时地交换子密钥(以防万一它被泄露)。阅读什么是好的通用 GnuPG 密钥设置?介绍设置 OpenPGP 密钥时要考虑的不同事项。

在构建 Docker 镜像时,使用COPY将文件导入机器,然后将gpg --import其放入 Dockerfile。之后,它的可用方式与您在容器内使用gpg --gen-key.