翻译|布加迪评论家|孙淑娟在跨网络系统交换数据时,信任是一个关键问题。当通过不可靠的媒体(如Internet)进行交互时,确保系统所依赖的所有数据的发布者的完整性尤为重要。需要强大的加密保证来保护数据,而这正是DockerContentTrust(DCT)的用武之地。Docker(DCT)为基础设施中使用的软件类型和版本提供强大的加密保证。DockerContentTrust与Docker版本1.8一起发布。DockerContentTrust添加的安全措施可以检查容器镜像、包含应用程序组件的容器文件以及存储在DockerHub等注册表中的内容的一致性。通过注册表,DockerContentTrust解决了两个问题:从远程存储库下载容器镜像的用户可能会上传包含恶意软件的镜像,而无法验证其完整性。其次,用户可能会将过时的容器上传到注册表,这可能会影响公司的互操作性、兼容性或性能。DCT是如何工作的?DockerContentTrust非常简单。DockerContentTrust基于DockerNotary工具来发布和管理可信内容和更新框架(TUF),这是一个用于保护软件更新系统的框架。Notary项目为建立信任以验证和处理内容集合提供了客户端/服务器基础。用户可以安全地获取发布者的公钥,然后使用公钥来验证内容。Notary依靠TUF进行安全的软件分发和更新操作。DockerContent信任密钥:图像标签的信任是通过使用签名密钥来管理的。DCT与图像的TAG(标签)部分相关联。当第一次使用DCT操作时,会生成一个密钥集。以下密钥类构成一个密钥集:离线密钥,它们是镜像标签的DCT的根。由存储库或标记标签的标签密钥服务器管理的密钥,例如时间戳密钥,用于保持存储库的新鲜度安全。对图像标签的信任是通过使用签名密钥来管理的。Docker客户端默认不启用DCT。必须遵循以下步骤来设置DCT。要启用DCT,请在Linuxdocker节点上发出以下命令:$exportDOCKER_CONTENT_TRUST=1DOCKER_CONTENT_TRUST=0用于禁用DCT。启用DockerContentTrust的步骤:生成密钥将Signer添加到Docker存储库为图像签名为了进行说明,我将使用DockerCentral执行启用DockerContentTrust的步骤。第1步:登录到DockerHub。dev@srini:~$dockerloginUsername:srinukolaparthiPassword:******登录成功第2步:生成信任密钥。可信密钥基本上建立了您的用户身份并授予您访问存储库镜像的权限。Docker信任密钥生成dev@raghu:~$dockertrustkeygeneratesrinidevGeneratingkeyforsrinidev...EnterpassphrasefornewsrinidevkeywithID5259740:RepeatpassphrasefornewsrinidevkeywithID5259740:Successfullyprivategeneratedandloaded钥匙。可用的相应公钥:/Users/docker/srinidev.pub第3步:将签名者添加到Docker存储库。docker–keydev@srini:~$dockertrustsigneradd--keysrinidev.pubsrinidevsrinidev/springboot-testAddingsigner"srinidev"tosrinidev/springboot...初始化签名存储库srinidev/springboot...您将要创建一个新的根签名密钥密码。此密码将用于保护您的签名系统中最敏感的密钥。请选择一个长而复杂的密码短语,并注意保护密码和密钥文件本身的安全并进行备份。强烈建议您使用密码管理器生成密码并确保其安全。将无法恢复此密钥。您可以在配置目录中找到该密钥。为ID为443ffc9的新根密钥输入密码:为ID为443ffc9的新根密钥重复密码:为ID为d6ef6dd的新存储库密钥输入密码:为ID为d6ef6dd的新存储库密钥重复密码:成功初始化“srinidev/springboot”成功添加签名者:srinidev到srinidev/springboot第4步:dev@srini:~$dockerbuild-tsrinidev/springboot:unsignedSendingbuildcontexttoDockerdaemon3.072kBStep1/2:FROMbusybox:latestlatest:Pullingfromlibrarybusybox05669b0daf1fb:PullcompleteDigest:sha256:e26cd013274a657b86e706210ddd5cc1f82f50155791199d29b9e86e935ce135Status:Downloadednewerimageforbusybox:latest--->93aa35aa1c79Step2/2:CMDHellothisisbusybox!--->Runninging8ea53541c3fRemovingintermediatecontainerk8ea53541c3f--->827bac2bb535Successfullybuilt827bac2bb535Successfullytaggedsrinidev/springboot:unsigned第五步:推送镜像到Docker仓库dev@srini:~$dockerpushsrinidev/springboot:unsigned第六步:执行命令:$exportDOCKER_CONTENT_TRUST=1第七步:运行Docker镜像,检查DockerContentTrust是否有效dev@srini:~$dockerrunsrinidev/springboot:unsigneddocker:Novalidtrustdataforunsigned.See'dockerrun--help'.由于图像未签名且没有si提供了gnature数据,无法启动,因为启用了DockerContentTrust。很明显,如果启用DCT,它将允许用户在您的系统上拉取/运行图像。第8步:现在是测试和构建新签名映像的时候了。dev@srini:~$dockerbuild-tsrinidev/springboot:signed第9步:使用以下命令对Docker镜像进行签名。dev@srini:~$dockertrustsignsrinidev/springboot:signed为本地镜像srinidev/springboot:signed签名并推送信任数据,可能会覆盖远程信任数据推送参考仓库[docker.io/srinidev/springboot:signed]a6d503001157:Layalreadyexistssigned:digest:sha256:e8d2db0f9cc124273e5f3bbbd2006bf2f3629953983df859e3aa8092134fa373size:567SigningandpushingtrustmetadataEnterpassphraseforsrinidevkeywithID5239740:Successfullysigneddocker.io/srinidev/springboot:signedDTS命令将生成签名,并将签名数据和镜像本身推送到Docker注册中心。基本上,它会签署图像并执行Docker推送。第10步:运行新的Docker签名映像。dev@srini:~$dockerrunsrinidev/springboot:signed结束语如果以上步骤成功,说明DockerContentTrust生效了。要使用带有签名和认证图像的远程存储库,用户必须启用选择加入DockerContentTrust功能。原标题:HowtoSecureContainersUsingDockerContentTrust,作者:SrinivasKolaparthi