Docker信任:无法将信任旋转到新的受信任根:无法使用当前受信任证书验证数据

时间:2019-03-18 12:00:55

标签: docker notary

经过一个月的Docker信任,我通过GitLab CI正常工作后,突然收到了此消息。

我有一个安装了〜/ .docker / trust的Gitlab Runner(因此它一直存在)并将其推送到我们的质量检查注册表。

tag_image_test:
  stage: tag_image
  script:
    - docker login -u "gitlab-ci-token" -p "$CI_BUILD_TOKEN" $CI_REGISTRY
    - docker pull "${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_SLUG}"
    - export DOCKER_CONTENT_TRUST=1
    - export DOCKER_CONTENT_TRUST_SERVER=$QA_REGISTRY_SIGNER
    - export DOCKER_CONTENT_TRUST_ROOT_PASSPHRASE=$QA_REGISTRY_SIGNER_ROOT_PASSPHRASE
    - export DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE=$QA_REGISTRY_SIGNER_REPO_PASSPHRASE
    - docker login -u "$QA_REGISTRY_USERNAME" -p "$QA_REGISTRY_PASSWORD" $QA_REGISTRY_URL
    - export PROJ_PATH=$(echo -en $CI_PROJECT_PATH | tr '[:upper:]' '[:lower:]')
    - docker tag "${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_SLUG}" "${QA_REGISTRY_IMAGE}/${PROJ_PATH}:${CI_COMMIT_REF_SLUG}"
    - docker push "${QA_REGISTRY_IMAGE}/${PROJ_PATH}:${CI_COMMIT_REF_SLUG}"

但是push命令的结尾是:

time="2019-03-18T11:51:14Z" level=debug msg="failed to verify TUF data for: qa.registry.local/mygroup/myimage, valid signatures did not meet threshold for "
time="2019-03-18T11:51:14Z" level=debug msg="downloaded 1.root is invalid: could not rotate trust to a new trusted root: failed to validate data with current trusted certificates"
time="2019-03-18T11:51:14Z" level=debug msg="Client Update (Root): could not rotate trust to a new trusted root: failed to validate data with current trusted certificates"
could not rotate trust to a new trusted root: failed to validate data with current trusted certificates

当我查看root.json文件时,到期时间并不长:

"expires":"2029-02-08T15:07:05.172338131Z"

targets.json相同:

"expires":"2022-02-10T15:07:05.173954376Z"

所以我对正在发生的事情不知所措,并且可能不了解它正在尝试做什么。有人有见识吗?

2 个答案:

答案 0 :(得分:1)

我仍在学习docker,但您确定它正在查找的是 root.json 而不是 roots.json

基于此处的配置,应该在 roots.json 中查找受信任的证书。

也许您正在使用错误的文件来标识您的根源,或者您的帖子中可能有错字。

无论如何,这是有帮助的: https://github.com/cirocosta/docker-cli/blob/master/vendor/github.com/theupdateframework/notary/trustpinning/certs.go

可以看到这些错误的产生原因,并附有注释,说明为什么会发生这些错误。

例如,关于按键旋转错误:

  

//当我们无法进行完整的根密钥旋转时,返回ErrRootRotationFail   //无法添加新的根证书或删除旧的根证书

答案 1 :(得分:0)

这只是一个局部损坏的状态,对吗?您应该可以通过公证删除server.example.com/test1来修复它。

我要解决的问题是惰性初始化,其中不再需要显式调用公证初始化。作为延迟初始化的一部分,我们始终会在假定需要在本地创建服务器之前向服务器查询现有数据。

一个短期解决方法可能是检查服务器,或者如果网络连接不可用,则检查本地缓存中是否存在现有数据。目前,我相信init会假设该存储库不存在,并且会覆盖任何现有的缓存。

还请确保配置DNS并在主机文件中输入主机条目。


对于通过“管理员设置”的“内容信任”部分配置的UCP签名策略,有必要确定图像是由UCP组织的成员签名的。我们通过使用客户端捆绑软件来做到这一点,您可以从UCP为您的用户帐户下载客户端捆绑软件。客户端捆绑包包含一个“ cert.pem”文件(一个由UCP证书颁发机构签名的x509证书)和一个“ key.pem”文件(一个与证书匹配的私钥)。

您需要创建“目标/发布”委派和另一个委派,例如“ targets / my_user”,并将“ cert.pem”添加为两者的公共签名密钥。然后,当另一个服务检查信任数据时,他们可以确定证书属于UCP组织的成员,并且它们的签名应被信任。然后,您需要导入key.pem,以便在按下时可以进行签名。

documentation 23提供了更多信息和要运行的特定命令,特别是“初始化回购”部分。