无法在公证中签署和推送信任元数据

我正在虚拟机中实施公证。 为了有一个参考,我在主机A上有dockerregistry,我想在主机B上部署公证服务器,签名者和CLI,以便将注册图像推送到registry并从不同的机器签名。 但是,当我尝试在angular色目标的公证人主持人B上签名图像时,就会出现问题。 出现以下错误消息:

[root@HostB ~]# docker push my.registry:443/galera-leader-proxy:v1.0.0 The push refers to a repository [my.registry:443/galera-leader-proxy] 5f70bf18a086: Layer already exists 1de59669c563: Layer already exists 17dd9fb03617: Layer already exists 26093688fdcb: Layer already exists e08be57f5919: Layer already exists v1.0.0: digest: sha256:6e48967416ea76ba2825511da7b05107a41f585629009d18ccbf30a1e1ce0e5a size: 2179 Signing and pushing trust metadata ERRO[0000] couldn't add target to targets: could not find necessary signing keys, at least one of these keys must be available: b92334936cf0a0f0e3fb9dce459212537387847ee288ce27762fd54850f89e6f Failed to sign "my.registry:443/galera-leader-proxy":v1.0.0 - could not find necessary signing keys, at least one of these keys must be available: b92334936cf0a0f0e3fb9dce459212537387847ee288ce27762fd54850f89e6f Error: could not find signing keys for remote repository my.registry:443/galera-leader-proxy, or could not decrypt signing key: could not find necessary signing keys, at least one of these keys must be available: b92334936cf0a0f0e3fb9dce459212537387847ee288ce27762fd54850f89e6f 

泊坞窗图像被推送到registry,但在签署时,我得到的错误消息,没有find“ 钥匙 ”签署。 但是,如果我看到公证人的钥匙,如果可用的钥匙是不能被发现的钥匙。 那么我不知道为什么会发生这种情况,或者我configuration的很糟糕:

 [root@HostB ~]# dockernotary key list ROLE GUN KEY ID LOCATION ---- --- ------ -------- root 7b8139837e3bf8b013f69bf0750d46ba0f70a6a6d9640eadcb592ae8a5ae2c0d /home/gmaurelia/.docker/trust/private snapshot ...43/galera-leader-proxy 92cf3f72d573cab7b6045f72fe224a4ccf786e9ddd29c89b3a542b610061c763 /home/gmaurelia/.docker/trust/private targets ...43/galera-leader-proxy b92334936cf0a0f0e3fb9dce459212537387847ee288ce27762fd54850f89e6f /home/gmaurelia/.docker/trust/private PD: alias dockernotary="notary -c /home/gmaurelia/.docker/trust/config.json -d /home/gmaurelia/.docker/trust/ -s https://notary-server:4443" 

我甚至不能签下angular色:目标或目标/发布

对于多台主机上的公证员,您需要在您的第一台主机上执行委派步骤。 这是由dockerlogging的多步骤过程 ,涉及以下内容:

  • 在主机B上生成一个TLS密钥对(以下包括一个自签名的步骤,也可以由受信任的CA签名):

    openssl genrsa -out delegation.key 2048

    openssl req -new -sha256 -key delegation.key -out delegation.csr

    openssl x509 -req -sha256 -days 365 -in delegation.csr -signkey delegation.key -out delegation.crt

  • 将crt文件从主机B复制到主机A,并在主机A上使用公证命令添加新的证书委托。然后将该更改发布到服务器(以下假定docker.io是您的服务器):

    notary delegation add docker.io/<username>/<imagename> targets/releases delegation.crt --all-paths

    notary publish docker.io/<username>/<imagename>

  • 在主机B上导入新的TLS密钥供公证人使用:

    notary key import delegation.key --role user

现在您应该能够在主机B上生成签名

公证人员应注意保护和备份在主机A上生成的根证书。这通常称为脱机证书。 如果您的两台主机的安全性不是问题(您完全信任它们),则可以简单地复制这两者之间的$HOME/.docker/trust文件夹。

我遇到的问题是,在我执行docker push之前,我使用了命令: 公证人init my.registry:443 / collection ,公证人用不同的密钥生成了一个集合,这样我就不能在任何angular色下推送任何图像的docker甚至是目标。

一旦我做到了正确的方式,我将你提到的步骤应用于我,问题就解决了。 公证configuration如下:

命令:tree $ HOME / .docker / trust /

 .docker/trust ├── certs │  ├── delegation.crt │  └── proof │  ├── delegation.crt │  ├── delegation.csr │  └── delegation.key ├── config.json ├── private │  ├── root_keys │  │  └── 4e46a197de40621094f86e0cea4aa892d7c3cfb1b3400c64f6d7d82e4b97a470.key │  └── tuf_keys │  ├── 3269a0858ca91001c543435d0242e747bd08e68b52533f1b42028388ed02c7e6.key │  └── my.registry:443 │  └── galera-leader-proxy │  └── | 873ba8267df2be149fba2230441961812159c35537b18c133247239f4bafa989.key ├── root-ca.crt ├── tls │  └── my.registry:443 │  └── root-ca.crt └── tuf └── my.registry:443 └── galera-leader-proxy ├── changelist └── metadata ├── root.json ├── snapshot.json ├── targets │  ├── kube1.json │  └── releases.json ├── targets.json └── timestamp.json 

另一方面,要正确configuration客户端,我定义了以下别名:

 alias dockernotary="notary -c $HOME/.docker/trust/config.json -d $HOME/.docker/trust/ -s https://notary-server:4443" 

Saludos。