Occasional failure with `docker trust signer add` on Windows
Description
On Windows, docker trust signer add fails by chance due to the root cause of https://github.com/theupdateframework/notary/issues/1599
Steps to reproduce the issue:
- Setup a notary server
- Generate key by
docker trust key generate signingkey - Run
docker -D trust signer add --key "signingkey.pub" signingkey <registry>/<repo>against a new trust collection - Retry step 3 on success
Describe the results you received:
C:\Testing>docker -D trust signer add --key "signingkey.pub" signingkey <registry>/<repo>
Adding signer "signingkey" to <registry>/<repo>...
time="2021-04-27T07:26:29Z" level=debug msg="reading certificate directory: C:\\Users\\testuser\\.docker\\tls\\<registry>"
time="2021-04-27T07:26:29Z" level=debug msg="Making dir path: C:\\Users\\testuser\\.docker\\trust\\tuf\\<registry>\\<repo>\\changelist"
time="2021-04-27T07:26:30Z" level=debug msg="received HTTP status 404 when requesting root."
Initializing signed repository for <registry>/<repo>...
time="2021-04-27T07:26:30Z" level=debug msg="generated ECDSA key with keyID: 94547a5f82c10fc951f9060ac5399cf4846057a8dc1bd7bfb2f77b028f999155"
time="2021-04-27T07:26:30Z" level=debug msg="generated new ecdsa key for role: targets and keyID: 94547a5f82c10fc951f9060ac5399cf4846057a8dc1bd7bfb2f77b028f999155"
time="2021-04-27T07:26:30Z" level=debug msg="got remote timestamp ecdsa key with keyID: 214c0a2cd795c5e1beb7ebf44ef4305e86452126e38fcf2d86c8e1ca7844f3e1"
time="2021-04-27T07:26:30Z" level=debug msg="got remote snapshot ecdsa key with keyID: e15a4b9c23bed60640cb4b0a875a00297e6e6e63dd7c430b2edca54df6684594"
time="2021-04-27T07:26:30Z" level=debug msg="generating new snapshot..."
time="2021-04-27T07:26:30Z" level=debug msg="Saving changes to Trusted Collection."
time="2021-04-27T07:26:30Z" level=debug msg="signing root..."
time="2021-04-27T07:26:30Z" level=debug msg="sign called with 1/1 required keys"
time="2021-04-27T07:26:30Z" level=debug msg="sign called with 0/0 required keys"
time="2021-04-27T07:26:30Z" level=debug msg="sign targets called for role targets"
time="2021-04-27T07:26:30Z" level=debug msg="sign called with 1/1 required keys"
time="2021-04-27T07:26:30Z" level=debug msg="sign called with 0/0 required keys"
Successfully initialized "<registry>/<repo>"
time="2021-04-27T07:26:30Z" level=debug msg="Adding delegation \"targets/signingkey\" with threshold 1, and 1 keys\\n"
time="2021-04-27T07:26:30Z" level=debug msg="Adding [] paths to delegation targets/signingkey\\n"
time="2021-04-27T07:26:30Z" level=debug msg="Adding delegation \"targets/releases\" with threshold 1, and 1 keys\\n"
time="2021-04-27T07:26:30Z" level=debug msg="Adding [] paths to delegation targets/releases\\n"
time="2021-04-27T07:26:30Z" level=debug msg="entered ValidateRoot with dns: <registry>/<repo>"
time="2021-04-27T07:26:30Z" level=debug msg="found the following root keys: [87b2ecd0eace017951ac5acf70cb130d25c5520c8794bf52abd6924959f38557]"
time="2021-04-27T07:26:30Z" level=debug msg="found 1 valid leaf certificates for <registry>/<repo>: 87b2ecd0eace017951ac5acf70cb130d25c5520c8794bf52abd6924959f38557"
time="2021-04-27T07:26:30Z" level=debug msg="found 1 leaf certs, of which 1 are valid leaf certs for <registry>/<repo>"
time="2021-04-27T07:26:30Z" level=debug msg="checking root against trust_pinning config for <registry>/<repo>"
time="2021-04-27T07:26:30Z" level=debug msg="checking trust-pinning for cert: 87b2ecd0eace017951ac5acf70cb130d25c5520c8794bf52abd6924959f38557"
time="2021-04-27T07:26:30Z" level=debug msg=" role has key IDs: 87b2ecd0eace017951ac5acf70cb130d25c5520c8794bf52abd6924959f38557"
time="2021-04-27T07:26:30Z" level=debug msg="verifying signature for key ID: 87b2ecd0eace017951ac5acf70cb130d25c5520c8794bf52abd6924959f38557"
time="2021-04-27T07:26:30Z" level=debug msg="root validation succeeded for <registry>/<repo>"
time="2021-04-27T07:26:30Z" level=debug msg="entered ValidateRoot with dns: <registry>/<repo>"
time="2021-04-27T07:26:30Z" level=debug msg="found the following root keys: [87b2ecd0eace017951ac5acf70cb130d25c5520c8794bf52abd6924959f38557]"
time="2021-04-27T07:26:30Z" level=debug msg="found 1 valid leaf certificates for <registry>/<repo>: 87b2ecd0eace017951ac5acf70cb130d25c5520c8794bf52abd6924959f38557"
time="2021-04-27T07:26:30Z" level=debug msg="found 1 leaf certs, of which 1 are valid leaf certs for <registry>/<repo>"
time="2021-04-27T07:26:30Z" level=debug msg="checking root against trust_pinning config for <registry>/<repo>"
time="2021-04-27T07:26:30Z" level=debug msg="checking trust-pinning for cert: 87b2ecd0eace017951ac5acf70cb130d25c5520c8794bf52abd6924959f38557"
time="2021-04-27T07:26:30Z" level=debug msg=" role has key IDs: 87b2ecd0eace017951ac5acf70cb130d25c5520c8794bf52abd6924959f38557"
time="2021-04-27T07:26:30Z" level=debug msg="verifying signature for key ID: 87b2ecd0eace017951ac5acf70cb130d25c5520c8794bf52abd6924959f38557"
time="2021-04-27T07:26:30Z" level=debug msg="root validation succeeded for <registry>/<repo>"
time="2021-04-27T07:26:30Z" level=debug msg="received HTTP status 404 when requesting root."
time="2021-04-27T07:26:30Z" level=debug msg="Loading trusted collection."
time="2021-04-27T07:26:30Z" level=debug msg="entered ValidateRoot with dns: <registry>/<repo>"
time="2021-04-27T07:26:30Z" level=debug msg="found the following root keys: [87b2ecd0eace017951ac5acf70cb130d25c5520c8794bf52abd6924959f38557]"
time="2021-04-27T07:26:30Z" level=debug msg="found 1 valid leaf certificates for <registry>/<repo>: 87b2ecd0eace017951ac5acf70cb130d25c5520c8794bf52abd6924959f38557"
time="2021-04-27T07:26:30Z" level=debug msg="found 1 leaf certs, of which 1 are valid leaf certs for <registry>/<repo>"
time="2021-04-27T07:26:30Z" level=debug msg="checking root against trust_pinning config for <registry>/<repo>"
time="2021-04-27T07:26:30Z" level=debug msg="checking trust-pinning for cert: 87b2ecd0eace017951ac5acf70cb130d25c5520c8794bf52abd6924959f38557"
time="2021-04-27T07:26:30Z" level=debug msg=" role has key IDs: 87b2ecd0eace017951ac5acf70cb130d25c5520c8794bf52abd6924959f38557"
time="2021-04-27T07:26:30Z" level=debug msg="verifying signature for key ID: 87b2ecd0eace017951ac5acf70cb130d25c5520c8794bf52abd6924959f38557"
time="2021-04-27T07:26:30Z" level=debug msg="root validation succeeded for <registry>/<repo>"
time="2021-04-27T07:26:30Z" level=debug msg="targets role has key IDs: 94547a5f82c10fc951f9060ac5399cf4846057a8dc1bd7bfb2f77b028f999155"
time="2021-04-27T07:26:30Z" level=debug msg="verifying signature for key ID: 94547a5f82c10fc951f9060ac5399cf4846057a8dc1bd7bfb2f77b028f999155"
time="2021-04-27T07:26:30Z" level=debug msg="role targets/signingkey with no Paths will never be able to publish content until one or more are added"
time="2021-04-27T07:26:30Z" level=debug msg="error attempting to apply change #0: create, on scope: targets/signingkey path: type: delegation"
time="2021-04-27T07:26:30Z" level=debug msg="Error applying changelist"
tuf: invalid role targets/signingkey.
Failed to add signer to: <registry>/<repo>
Describe the results you expected:
C:\Testing>docker -D trust signer add --key "signingkey.pub" signingkey <registry>/<repo>
Adding signer "signingkey" to <registry>/<repo>...
time="2021-04-27T07:26:30Z" level=debug msg="reading certificate directory: C:\\Users\\testuser\\.docker\\tls\\<registry>"
time="2021-04-27T07:26:30Z" level=debug msg="Making dir path: C:\\Users\\testuser\\.docker\\trust\\tuf\\<registry>\\<repo>\\changelist"
time="2021-04-27T07:26:30Z" level=debug msg="received HTTP status 404 when requesting root."
Initializing signed repository for <registry>/<repo>...
time="2021-04-27T07:26:30Z" level=debug msg="generated ECDSA key with keyID: 98b3bd922af753ff6b82e877df1fb34094ef351928c3a95f6255ad35dafcc374"
time="2021-04-27T07:26:30Z" level=debug msg="generated new ecdsa key for role: targets and keyID: 98b3bd922af753ff6b82e877df1fb34094ef351928c3a95f6255ad35dafcc374"
time="2021-04-27T07:26:30Z" level=debug msg="got remote timestamp ecdsa key with keyID: 5e543105ca16689f13de4c49c906c93ff4b684d640fabc5044e7b2493fcac5c9"
time="2021-04-27T07:26:31Z" level=debug msg="got remote snapshot ecdsa key with keyID: 9023480e4fba7c4c8568ef405fb9c15150880958ea51a3b835734b4ce920a001"
time="2021-04-27T07:26:31Z" level=debug msg="generating new snapshot..."
time="2021-04-27T07:26:31Z" level=debug msg="Saving changes to Trusted Collection."
time="2021-04-27T07:26:31Z" level=debug msg="signing root..."
time="2021-04-27T07:26:31Z" level=debug msg="sign called with 1/1 required keys"
time="2021-04-27T07:26:31Z" level=debug msg="sign called with 0/0 required keys"
time="2021-04-27T07:26:31Z" level=debug msg="sign targets called for role targets"
time="2021-04-27T07:26:31Z" level=debug msg="sign called with 1/1 required keys"
time="2021-04-27T07:26:31Z" level=debug msg="sign called with 0/0 required keys"
Successfully initialized "<registry>/<repo>"
time="2021-04-27T07:26:31Z" level=debug msg="Adding delegation \"targets/signingkey\" with threshold 1, and 1 keys\\n"
time="2021-04-27T07:26:31Z" level=debug msg="Adding [] paths to delegation targets/signingkey\\n"
time="2021-04-27T07:26:31Z" level=debug msg="Adding delegation \"targets/releases\" with threshold 1, and 1 keys\\n"
time="2021-04-27T07:26:31Z" level=debug msg="Adding [] paths to delegation targets/releases\\n"
time="2021-04-27T07:26:31Z" level=debug msg="entered ValidateRoot with dns: <registry>/<repo>"
time="2021-04-27T07:26:31Z" level=debug msg="found the following root keys: [06cbb4d0c2071c8d87d69c674fae35a9ac02ba3fe308076be309ef20d065c873]"
time="2021-04-27T07:26:31Z" level=debug msg="found 1 valid leaf certificates for <registry>/<repo>: 06cbb4d0c2071c8d87d69c674fae35a9ac02ba3fe308076be309ef20d065c873"
time="2021-04-27T07:26:31Z" level=debug msg="found 1 leaf certs, of which 1 are valid leaf certs for <registry>/<repo>"
time="2021-04-27T07:26:31Z" level=debug msg="checking root against trust_pinning config for <registry>/<repo>"
time="2021-04-27T07:26:31Z" level=debug msg="checking trust-pinning for cert: 06cbb4d0c2071c8d87d69c674fae35a9ac02ba3fe308076be309ef20d065c873"
time="2021-04-27T07:26:31Z" level=debug msg=" role has key IDs: 06cbb4d0c2071c8d87d69c674fae35a9ac02ba3fe308076be309ef20d065c873"
time="2021-04-27T07:26:31Z" level=debug msg="verifying signature for key ID: 06cbb4d0c2071c8d87d69c674fae35a9ac02ba3fe308076be309ef20d065c873"
time="2021-04-27T07:26:31Z" level=debug msg="root validation succeeded for <registry>/<repo>"
time="2021-04-27T07:26:31Z" level=debug msg="entered ValidateRoot with dns: <registry>/<repo>"
time="2021-04-27T07:26:31Z" level=debug msg="found the following root keys: [06cbb4d0c2071c8d87d69c674fae35a9ac02ba3fe308076be309ef20d065c873]"
time="2021-04-27T07:26:31Z" level=debug msg="found 1 valid leaf certificates for <registry>/<repo>: 06cbb4d0c2071c8d87d69c674fae35a9ac02ba3fe308076be309ef20d065c873"
time="2021-04-27T07:26:31Z" level=debug msg="found 1 leaf certs, of which 1 are valid leaf certs for <registry>/<repo>"
time="2021-04-27T07:26:31Z" level=debug msg="checking root against trust_pinning config for <registry>/<repo>"
time="2021-04-27T07:26:31Z" level=debug msg="checking trust-pinning for cert: 06cbb4d0c2071c8d87d69c674fae35a9ac02ba3fe308076be309ef20d065c873"
time="2021-04-27T07:26:31Z" level=debug msg=" role has key IDs: 06cbb4d0c2071c8d87d69c674fae35a9ac02ba3fe308076be309ef20d065c873"
time="2021-04-27T07:26:31Z" level=debug msg="verifying signature for key ID: 06cbb4d0c2071c8d87d69c674fae35a9ac02ba3fe308076be309ef20d065c873"
time="2021-04-27T07:26:31Z" level=debug msg="root validation succeeded for <registry>/<repo>"
time="2021-04-27T07:26:31Z" level=debug msg="received HTTP status 404 when requesting root."
time="2021-04-27T07:26:31Z" level=debug msg="Loading trusted collection."
time="2021-04-27T07:26:31Z" level=debug msg="entered ValidateRoot with dns: <registry>/<repo>"
time="2021-04-27T07:26:31Z" level=debug msg="found the following root keys: [06cbb4d0c2071c8d87d69c674fae35a9ac02ba3fe308076be309ef20d065c873]"
time="2021-04-27T07:26:31Z" level=debug msg="found 1 valid leaf certificates for <registry>/<repo>: 06cbb4d0c2071c8d87d69c674fae35a9ac02ba3fe308076be309ef20d065c873"
time="2021-04-27T07:26:31Z" level=debug msg="found 1 leaf certs, of which 1 are valid leaf certs for <registry>/<repo>"
time="2021-04-27T07:26:31Z" level=debug msg="checking root against trust_pinning config for <registry>/<repo>"
time="2021-04-27T07:26:31Z" level=debug msg="checking trust-pinning for cert: 06cbb4d0c2071c8d87d69c674fae35a9ac02ba3fe308076be309ef20d065c873"
time="2021-04-27T07:26:31Z" level=debug msg=" role has key IDs: 06cbb4d0c2071c8d87d69c674fae35a9ac02ba3fe308076be309ef20d065c873"
time="2021-04-27T07:26:31Z" level=debug msg="verifying signature for key ID: 06cbb4d0c2071c8d87d69c674fae35a9ac02ba3fe308076be309ef20d065c873"
time="2021-04-27T07:26:31Z" level=debug msg="root validation succeeded for <registry>/<repo>"
time="2021-04-27T07:26:31Z" level=debug msg="targets role has key IDs: 98b3bd922af753ff6b82e877df1fb34094ef351928c3a95f6255ad35dafcc374"
time="2021-04-27T07:26:31Z" level=debug msg="verifying signature for key ID: 98b3bd922af753ff6b82e877df1fb34094ef351928c3a95f6255ad35dafcc374"
time="2021-04-27T07:26:31Z" level=debug msg="role targets/signingkey with no Paths will never be able to publish content until one or more are added"
time="2021-04-27T07:26:31Z" level=debug msg="role targets/releases with no Paths will never be able to publish content until one or more are added"
time="2021-04-27T07:26:31Z" level=debug msg="applied 4 change(s)"
time="2021-04-27T07:26:31Z" level=debug msg="sign targets called for role targets"
time="2021-04-27T07:26:31Z" level=debug msg="sign called with 1/1 required keys"
time="2021-04-27T07:26:31Z" level=debug msg="sign called with 0/0 required keys"
time="2021-04-27T07:26:31Z" level=debug msg="generating new snapshot..."
time="2021-04-27T07:26:31Z" level=debug msg="signing snapshot..."
time="2021-04-27T07:26:31Z" level=debug msg="sign called with 1/1 required keys"
time="2021-04-27T07:26:31Z" level=debug msg="Client does not have the key to sign snapshot. Assuming that server should sign the snapshot."
Successfully added signer: signingkey to <registry>/<repo>
Additional information you deem important:
Issue happens only occasionally due to https://github.com/theupdateframework/notary/issues/1599
Output of docker version:
Client: Docker Engine - Community
Cloud integration: 1.0.12
Version: 20.10.5
API version: 1.41
Go version: go1.13.15
Git commit: 55c4c88
Built: Tue Mar 2 20:14:53 2021
OS/Arch: windows/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.5
API version: 1.41 (minimum version 1.12)
Go version: go1.13.15
Git commit: 363e9a8
Built: Tue Mar 2 20:15:47 2021
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.4.4
GitCommit: 05f951a3781f4f2c1911b05e61c160e9c30eaa8e
runc:
Version: 1.0.0-rc93
GitCommit: 12644e614e25b05da6fd08a38ffa0cfe1903fdec
docker-init:
Version: 0.19.0
GitCommit: de40ad0
Output of docker info:
Client:
Context: default
Debug Mode: false
Plugins:
app: Docker App (Docker Inc., v0.9.1-beta3)
buildx: Build with BuildKit (Docker Inc., v0.5.1-docker)
scan: Docker Scan (Docker Inc., v0.6.0)
Server:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 20.10.5
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Cgroup Version: 1
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 05f951a3781f4f2c1911b05e61c160e9c30eaa8e
runc version: 12644e614e25b05da6fd08a38ffa0cfe1903fdec
init version: de40ad0
Security Options:
seccomp
Profile: default
Kernel Version: 5.4.72-microsoft-standard-WSL2
Operating System: Docker Desktop
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 12.48GiB
Name: docker-desktop
ID: 7JSG:F7AS:7FNJ:QXYK:GRBZ:WOD2:MQ5L:GWLV:OGAD:GHDT:A7IS:6MC5
Docker Root Dir: /var/lib/docker
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
WARNING: No blkio throttle.read_bps_device support
WARNING: No blkio throttle.write_bps_device support
WARNING: No blkio throttle.read_iops_device support
WARNING: No blkio throttle.write_iops_device support
Additional environment details (AWS, VirtualBox, physical, etc.): None
Precisely, the change AddDelegationPaths is applied before AddDelegationRoleAndKeys since the file based change list does not preserve order.
Is there any workaround for this? I'm hitting the same issue for some Azure CR repositories with 100% reproducibility