如何在 Docker 容器内使用 GnuPG,因为它缺少熵?
How to use GnuPG inside Docker containers, as it is missing entropy?
我需要docker调整 apt 存储库。其中的包需要签名,目前由
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)
我不知道是否可以在 docker 容器内生成 gpg 密钥,即使可以,也可能不是一个好主意。
有没有办法通过外部密钥对 repo 的内容进行签名?
在 docker build
之外,在与 Dockerfile
相同的目录树中生成密钥。然后您可以 ADD
图像的密钥,aptly
就可以使用它。请记住,此图像现在包含一个 GPG 私钥,因此需要像您对该密钥一样保密。
如果您想在 运行 容器中使用密钥(而不是在构建映像时使用),请使用 -v
标志将密钥文件装载到映像中。 (这允许您在不发布私钥的情况下发布图像。
熵缺失
Docker 不 提供虚拟 /dev/[u]random
设备。如果你在容器中没有足够的熵,那么你在主机上也没有足够的熵。
检查/proc/sys/kernel/random/entropy_avail
的内容,在Docker宿主机和容器上应该是差不多的(如果数字略有不同,只是变化很频繁,否则重新检查一个几次)。
可能原因:
- 运行虚拟机中的docker主机,比如因为
boot2docker
或者自建虚拟机。只需确保在虚拟机中获得更多熵,havegd
是开发人员机器的一个非常简单的解决方案,但可能不适合生产。
- 另一个 container/application 正在耗尽所有熵。实现哪一个和interrupt/terminate它,或者产生更多的熵。
- 你通常没有足够的熵。做一些工作(mouse/keyboard 移动,(硬盘)磁盘 I/O).
外部生成密钥对
反正在真机上生成密钥,只移动一个(私有)子密钥到服务器可能更合理。这样,您就可以时不时地交换子密钥(以防它被泄露)。阅读 What is a good general purpose GnuPG key setup? 了解设置 OpenPGP 密钥时要考虑的不同事项的介绍。
在构建 Docker 图像时,使用 COPY
将文件导入机器,然后 gpg --import
将其放入 Docker 文件中。之后,它的可用方式与使用 gpg --gen-key
.
在容器内生成它的方式完全相同
我在连接到生成 gpg
密钥的 docker 容器时通过 ping 一些网站,设法大大加快了熵的生成。
$ docker exec -it blimp_mailpilekermit_1 bash
mailpile@mailpile-kermit:~$ ping google.com &
mailpile@mailpile-kermit:~$ ping cloudfleet.io &
mailpile@mailpile-kermit:~$ cat /proc/sys/kernel/random/entropy_avail
757
这使 gpg
过程相对快速地完成了 2048 位密钥的生成。
泛洪 ping 外部接口(从另一台主机)也会将熵添加到池中。
例如。 ping -f $EXTERNALIP
需要成为 root 用户,最好不要在您关心的网络上执行此操作。
我需要docker调整 apt 存储库。其中的包需要签名,目前由
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)
我不知道是否可以在 docker 容器内生成 gpg 密钥,即使可以,也可能不是一个好主意。
有没有办法通过外部密钥对 repo 的内容进行签名?
在 docker build
之外,在与 Dockerfile
相同的目录树中生成密钥。然后您可以 ADD
图像的密钥,aptly
就可以使用它。请记住,此图像现在包含一个 GPG 私钥,因此需要像您对该密钥一样保密。
如果您想在 运行 容器中使用密钥(而不是在构建映像时使用),请使用 -v
标志将密钥文件装载到映像中。 (这允许您在不发布私钥的情况下发布图像。
熵缺失
Docker 不 提供虚拟 /dev/[u]random
设备。如果你在容器中没有足够的熵,那么你在主机上也没有足够的熵。
检查/proc/sys/kernel/random/entropy_avail
的内容,在Docker宿主机和容器上应该是差不多的(如果数字略有不同,只是变化很频繁,否则重新检查一个几次)。
可能原因:
- 运行虚拟机中的docker主机,比如因为
boot2docker
或者自建虚拟机。只需确保在虚拟机中获得更多熵,havegd
是开发人员机器的一个非常简单的解决方案,但可能不适合生产。 - 另一个 container/application 正在耗尽所有熵。实现哪一个和interrupt/terminate它,或者产生更多的熵。
- 你通常没有足够的熵。做一些工作(mouse/keyboard 移动,(硬盘)磁盘 I/O).
外部生成密钥对
反正在真机上生成密钥,只移动一个(私有)子密钥到服务器可能更合理。这样,您就可以时不时地交换子密钥(以防它被泄露)。阅读 What is a good general purpose GnuPG key setup? 了解设置 OpenPGP 密钥时要考虑的不同事项的介绍。
在构建 Docker 图像时,使用 COPY
将文件导入机器,然后 gpg --import
将其放入 Docker 文件中。之后,它的可用方式与使用 gpg --gen-key
.
我在连接到生成 gpg
密钥的 docker 容器时通过 ping 一些网站,设法大大加快了熵的生成。
$ docker exec -it blimp_mailpilekermit_1 bash
mailpile@mailpile-kermit:~$ ping google.com &
mailpile@mailpile-kermit:~$ ping cloudfleet.io &
mailpile@mailpile-kermit:~$ cat /proc/sys/kernel/random/entropy_avail
757
这使 gpg
过程相对快速地完成了 2048 位密钥的生成。
泛洪 ping 外部接口(从另一台主机)也会将熵添加到池中。
例如。 ping -f $EXTERNALIP
需要成为 root 用户,最好不要在您关心的网络上执行此操作。