Signed-off-by: Riyaz Faizullabhoy <riyaz.faizullabhoy@docker.com>
(cherry picked from commit 77da3bcb72ba4f936c428cb2b912c007a94cb87a)
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
| ... | ... |
@@ -13,15 +13,11 @@ weight=-1 |
| 13 | 13 |
|
| 14 | 14 |
When transferring data among networked systems, *trust* is a central concern. In |
| 15 | 15 |
particular, when communicating over an untrusted medium such as the internet, it |
| 16 |
-is critical to ensure the integrity and publisher of all the data a system |
|
| 17 |
-operates on. You use Docker to push and pull images (data) to a registry. Content trust |
|
| 18 |
-gives you the ability to both verify the integrity and the publisher of all the |
|
| 16 |
+is critical to ensure the integrity and the publisher of all the data a system |
|
| 17 |
+operates on. You use Docker Engine to push and pull images (data) to a public or private registry. Content trust |
|
| 18 |
+gives you the ability to verify both the integrity and the publisher of all the |
|
| 19 | 19 |
data received from a registry over any channel. |
| 20 | 20 |
|
| 21 |
-Content trust is currently only available for users of the public Docker Hub. It |
|
| 22 |
-is currently not available for the Docker Trusted Registry or for private |
|
| 23 |
-registries. |
|
| 24 |
- |
|
| 25 | 21 |
## Understand trust in Docker |
| 26 | 22 |
|
| 27 | 23 |
Content trust allows operations with a remote Docker registry to enforce |
| ... | ... |
@@ -82,7 +78,7 @@ desirable, unsigned image tags are "invisible" to them. |
| 82 | 82 |
|
| 83 | 83 |
 |
| 84 | 84 |
|
| 85 |
-To the consumer who does not enabled content trust, nothing about how they |
|
| 85 |
+To the consumer who has not enabled content trust, nothing about how they |
|
| 86 | 86 |
work with Docker images changes. Every image is visible regardless of whether it |
| 87 | 87 |
is signed or not. |
| 88 | 88 |
|
| ... | ... |
@@ -127,7 +123,7 @@ The following image depicts the various signing keys and their relationships: |
| 127 | 127 |
>tag from this repository prior to the loss. |
| 128 | 128 |
|
| 129 | 129 |
You should backup the root key somewhere safe. Given that it is only required |
| 130 |
-to create new repositories, it is a good idea to store it offline. |
|
| 130 |
+to create new repositories, it is a good idea to store it offline in hardware. |
|
| 131 | 131 |
For details on securing, and backing up your keys, make sure you |
| 132 | 132 |
read how to [manage keys for content trust](trust_key_mng.md). |
| 133 | 133 |
|
| ... | ... |
@@ -198,11 +194,12 @@ When you push your first tagged image with content trust enabled, the `docker` |
| 198 | 198 |
client recognizes this is your first push and: |
| 199 | 199 |
|
| 200 | 200 |
- alerts you that it will create a new root key |
| 201 |
- - requests a passphrase for the key |
|
| 201 |
+ - requests a passphrase for the root key |
|
| 202 | 202 |
- generates a root key in the `~/.docker/trust` directory |
| 203 |
+ - requests a passphrase for the repository key |
|
| 203 | 204 |
- generates a repository key for in the `~/.docker/trust` directory |
| 204 | 205 |
|
| 205 |
-The passphrase you chose for both the root key and your content key-pair |
|
| 206 |
+The passphrase you chose for both the root key and your repository key-pair |
|
| 206 | 207 |
should be randomly generated and stored in a *password manager*. |
| 207 | 208 |
|
| 208 | 209 |
> **NOTE**: If you omit the `latest` tag, content trust is skipped. This is true |
| ... | ... |
@@ -267,7 +264,7 @@ Because the tag `docker/cliffs:latest` is not trusted, the `pull` fails. |
| 267 | 267 |
|
| 268 | 268 |
### Disable content trust for specific operations |
| 269 | 269 |
|
| 270 |
-A user that wants to disable content trust for a particular operation can use the |
|
| 270 |
+A user who wants to disable content trust for a particular operation can use the |
|
| 271 | 271 |
`--disable-content-trust` flag. **Warning: this flag disables content trust for |
| 272 | 272 |
this operation**. With this flag, Docker will ignore content-trust and allow all |
| 273 | 273 |
operations to be done without verifying any signatures. If we wanted the |
| ... | ... |
@@ -21,7 +21,7 @@ The easiest way to deploy Notary Server is by using Docker Compose. To follow th |
| 21 | 21 |
docker-compose up -d |
| 22 | 22 |
|
| 23 | 23 |
|
| 24 |
- For more detailed documentation about how to deploy Notary Server see https://github.com/docker/notary. |
|
| 24 |
+ For more detailed documentation about how to deploy Notary Server see the [instructions to run a Notary service](/notary/running_a_service.md) as well as https://github.com/docker/notary for more information. |
|
| 25 | 25 |
3. Make sure that your Docker or Notary client trusts Notary Server's certificate before you try to interact with the Notary server. |
| 26 | 26 |
|
| 27 | 27 |
See the instructions for [Docker](../../reference/commandline/cli.md#notary) or |
| ... | ... |
@@ -10,7 +10,7 @@ parent= "smn_content_trust" |
| 10 | 10 |
|
| 11 | 11 |
# Automation with content trust |
| 12 | 12 |
|
| 13 |
-Your automation systems that pull or build images can also work with trust. Any automation environment must set `DOCKER_TRUST_ENABLED` either manually or in in a scripted fashion before processing images. |
|
| 13 |
+Your automation systems that pull or build images can also work with trust. Any automation environment must set `DOCKER_TRUST_ENABLED` either manually or in a scripted fashion before processing images. |
|
| 14 | 14 |
|
| 15 | 15 |
## Bypass requests for passphrases |
| 16 | 16 |
|
| ... | ... |
@@ -43,7 +43,7 @@ Signing and pushing trust metadata |
| 43 | 43 |
|
| 44 | 44 |
## Building with content trust |
| 45 | 45 |
|
| 46 |
-You can also build with content trust. Before running the `docker build` command, you should set the environment variable `DOCKER_CONTENT_TRUST` either manually or in in a scripted fashion. Consider the simple Dockerfile below. |
|
| 46 |
+You can also build with content trust. Before running the `docker build` command, you should set the environment variable `DOCKER_CONTENT_TRUST` either manually or in a scripted fashion. Consider the simple Dockerfile below. |
|
| 47 | 47 |
|
| 48 | 48 |
```Dockerfile |
| 49 | 49 |
FROM docker/trusttest:latest |
| ... | ... |
@@ -18,7 +18,7 @@ sharing your repository key (a combination of your targets and snapshot keys - |
| 18 | 18 |
please see "[Manage keys for content trust](trust_key_mng.md)" for more information). |
| 19 | 19 |
A collaborator can keep their own delegation key private. |
| 20 | 20 |
|
| 21 |
-The `targest/releases` delegation is currently an optional feature - in order |
|
| 21 |
+The `targets/releases` delegation is currently an optional feature - in order |
|
| 22 | 22 |
to set up delegations, you must use the Notary CLI: |
| 23 | 23 |
|
| 24 | 24 |
1. [Download the client](https://github.com/docker/notary/releases) and ensure that it is |
| ... | ... |
@@ -40,7 +40,7 @@ available on your path |
| 40 | 40 |
|
| 41 | 41 |
For more detailed information about how to use Notary outside of the default |
| 42 | 42 |
Docker Content Trust use cases, please refer to the |
| 43 |
-[the Notary CLI documentation](https://docs.docker.com/notary/getting_started/). |
|
| 43 |
+[the Notary CLI documentation](/notary/getting_started.md). |
|
| 44 | 44 |
|
| 45 | 45 |
Note that when publishing and listing delegation changes using the Notary client, |
| 46 | 46 |
your Docker Hub credentials are required. |
| ... | ... |
@@ -37,7 +37,7 @@ workflow. They need to be |
| 37 | 37 |
|
| 38 | 38 |
Note: Prior to Docker Engine 1.11, the snapshot key was also generated and stored |
| 39 | 39 |
locally client-side. [Use the Notary CLI to manage your snapshot key locally |
| 40 |
-again](https://docs.docker.com/notary/advanced_usage/#rotate-keys) for |
|
| 40 |
+again](/notary/advanced_usage.md#rotate-keys) for |
|
| 41 | 41 |
repositories created with newer versions of Docker. |
| 42 | 42 |
|
| 43 | 43 |
## Choosing a passphrase |
| ... | ... |
@@ -64,6 +64,16 @@ Before backing them up, you should `tar` them into an archive: |
| 64 | 64 |
$ umask 077; tar -zcvf private_keys_backup.tar.gz ~/.docker/trust/private; umask 022 |
| 65 | 65 |
``` |
| 66 | 66 |
|
| 67 |
+## Hardware storage and signing |
|
| 68 |
+ |
|
| 69 |
+Docker Content Trust can store and sign with root keys from a Yubikey 4. The |
|
| 70 |
+Yubikey is prioritized over keys stored in the filesystem. When you initialize a |
|
| 71 |
+new repository with content trust, Docker Engine looks for a root key locally. If a |
|
| 72 |
+key is not found and the Yubikey 4 exists, Docker Engine creates a root key in the |
|
| 73 |
+Yubikey 4. Please consult the [Notary documentation](/notary/advanced_usage.md#use-a-yubikey) for more details. |
|
| 74 |
+ |
|
| 75 |
+Prior to Docker Engine 1.11, this feature was only in the experimental branch. |
|
| 76 |
+ |
|
| 67 | 77 |
## Lost keys |
| 68 | 78 |
|
| 69 | 79 |
If a publisher loses keys it means losing the ability to sign trusted content for |