管理內容信任的金鑰

對映象標籤的信任是透過使用金鑰來管理的。Docker 的內容信任使用五種不同型別的金鑰:

金鑰描述
根金鑰映象標籤的內容信任的根源。當啟用內容信任時,您只需建立一次根金鑰。也稱為離線金鑰,因為它應該保持離線狀態。
目標此金鑰允許您對映象標籤進行簽名,以管理委託,包括委託金鑰或允許的委託路徑。也稱為儲存庫金鑰,因為此金鑰決定了哪些標籤可以簽署到映象儲存庫中。
快照該金鑰對當前的映象標籤集合進行簽名,防止混合搭配攻擊。
時間戳此金鑰允許 Docker 映象儲存庫具有新鮮度安全保證,而無需在客戶端定期重新整理內容。
委託委託金鑰是可選的標籤金鑰,允許您將映象標籤的簽名委託給其他釋出者,而無需共享您的目標金鑰。

當第一次在啟用了內容信任的情況下執行 `docker push` 時,系統會自動為映象倉庫生成根金鑰、目標金鑰、快照金鑰和時間戳金鑰。

  • 根金鑰和目標金鑰在客戶端本地生成和儲存。

  • 時間戳金鑰和快照金鑰是安全地生成並存儲在與 Docker registry 一起部署的簽名伺服器中的。這些金鑰在一個不直接暴露於網際網路的後端服務中生成,並且在靜止時進行加密。使用 Notary CLI 在本地管理您的快照金鑰

委託金鑰是可選的,並且不是作為普通 `docker` 工作流程的一部分生成的。它們需要手動生成並新增到儲存庫

選擇一個密碼

您為根金鑰和倉庫金鑰選擇的密碼短語應隨機生成並存儲在密碼管理器中。擁有倉庫金鑰允許使用者對倉庫中的映象標籤進行簽名。密碼短語用於加密您的靜態金鑰,並確保丟失筆記型電腦或意外備份不會將私鑰材料置於風險之中。

備份你的金鑰

所有 Docker 信任金鑰在建立時都會使用您提供的密碼進行加密儲存。即便如此,您仍應注意備份它們的位置。好的做法是建立兩個加密的 USB 金鑰。

警告

將您的金鑰備份到安全可靠的位置非常重要。倉庫金鑰的丟失是可以恢復的,但根金鑰的丟失是無法恢復的。

Docker 客戶端將金鑰儲存在 `~/.docker/trust/private` 目錄中。在備份它們之前,您應該將它們 `tar` 成一個歸檔檔案。

$ umask 077; tar -zcvf private_keys_backup.tar.gz ~/.docker/trust/private; umask 022

硬體儲存和簽名

Docker 內容信任可以儲存並使用來自 Yubikey 4 的根金鑰進行簽名。Yubikey 的優先順序高於儲存在檔案系統中的金鑰。當您使用內容信任初始化一個新的儲存庫時,Docker Engine 會在本地查詢根金鑰。如果沒有找到金鑰並且存在 Yubikey 4,Docker Engine 會在 Yubikey 4 中建立一個根金鑰。有關更多詳細資訊,請參閱 Notary 文件

在 Docker Engine 1.11 之前,此功能僅在實驗分支中提供。

金鑰丟失

警告

如果釋出者丟失了金鑰,這意味著將失去為相關倉庫簽署映象的能力。如果您丟失了金鑰,請傳送電子郵件至 Docker Hub 支援。提醒一下,根金鑰的丟失是無法恢復的。

此丟失還需要每個在此丟失事件之前使用了來自此儲存庫的已簽名標籤的消費者進行手動干預。
映象消費者在處理之前從受影響的倉庫下載的內容時會收到以下錯誤

Warning: potential malicious behavior - trust data has insufficient signatures for remote repository docker.io/my/image: valid signatures did not meet threshold

要糾正這個問題,他們需要下載一個用新金鑰簽名的新映象標籤。