?
This document uses PHP Chinese website manual Release
本文檔介紹公證人 CLI 的基本用法,作為支持 Docker Content Trust的工具。對(duì)于更高級(jí)的使用情況,您必須運(yùn)行自己的公證服務(wù),并且應(yīng)該讀取公證客戶端用于高級(jí)用戶文檔的用法。
公證是用于發(fā)布和管理可信集合內(nèi)容的工具。發(fā)布商可以對(duì)收藏進(jìn)行數(shù)字簽名,消費(fèi)者可以驗(yàn)證內(nèi)容的完整性和來(lái)源。此功能基于簡(jiǎn)單的密鑰管理和簽名界面來(lái)創(chuàng)建簽名集合并配置可信發(fā)布者。
通過(guò)公證,任何人都可以提供對(duì)任意數(shù)據(jù)集合的信任。使用更新框架(TUF)作為基礎(chǔ)安全框架,公證負(fù)責(zé)創(chuàng)建,管理和分發(fā)必要的操作,以確保內(nèi)容的完整性和新鮮度。
您可以從 GitHub 的 Notary 存儲(chǔ)庫(kù)版本頁(yè)面下載針對(duì)64位 Linux 或 macOS 的預(yù)編譯公證庫(kù)二進(jìn)制文件。Windows 并未得到正式支持,但如果您是開(kāi)發(fā)人員和 Windows 用戶,我們將非常感謝您就問(wèn)題提供的任何見(jiàn)解。
公證處使用全球唯一名稱(GUN)來(lái)識(shí)別信托收藏。要使公證以多租戶方式運(yùn)行,您必須在通過(guò)公證客戶端與 Docker Hub 交互時(shí)使用此格式。為公證客戶端指定 Docker 鏡像名稱時(shí),GUN 格式為:
對(duì)于官方圖像(可通過(guò)“官方存儲(chǔ)庫(kù)”名稱識(shí)別),Docker Hub 上顯示的圖像名稱,前綴為docker.io/library/
。例如,如果你通常輸入docker pull ubuntu
你必須輸入notary {cmd} docker.io/library/ubuntu
。
對(duì)于所有其他圖像,Docker Hub 上顯示的圖像名稱前綴為docker.io
。
Docker Engine 客戶端為您處理這些名稱擴(kuò)展,因此不要更改您在 Engine 客戶端或 API 中使用的名稱。只有通過(guò)公證客戶端與相同的 Docker Hub 存儲(chǔ)庫(kù)進(jìn)行交互時(shí),才需要這樣做。
最基本的操作是將可用的簽名標(biāo)簽列入存儲(chǔ)庫(kù)。隔離使用的公證客戶端不知道信任存儲(chǔ)庫(kù)的位置。因此,您必須提供-s
(或長(zhǎng)格式--server
)標(biāo)志來(lái)告訴客戶端應(yīng)該與哪個(gè)存儲(chǔ)庫(kù)服務(wù)器進(jìn)行通信。
官方的Docker Hub公證服務(wù)器位于https://notary.docker.io
。如果您想使用您自己的公證服務(wù)器,則必須使用與客戶端相同或更新的公證版本來(lái)實(shí)現(xiàn)功能兼容性(例如:客戶端版本0.2,服務(wù)器/簽署者版本> = 0.2)。此外,公證處還會(huì)將您自己的簽名密鑰和先前下載的信任元數(shù)據(jù)的緩存存儲(chǔ)在隨-d
標(biāo)志一起提供的目錄中。與Docker Hub存儲(chǔ)庫(kù)進(jìn)行交互時(shí),您必須指示客戶端使用關(guān)聯(lián)的信任目錄,默認(rèn)情況下,該目錄.docker/trust
位于調(diào)用用戶的主目錄內(nèi)(未能使用此目錄可能會(huì)在向您的信任數(shù)據(jù)發(fā)布更新時(shí)導(dǎo)致錯(cuò)誤):
$ notary -s https://notary.docker.io -d ~/.docker/trust list docker.io/library/alpine NAME DIGEST SIZE (BYTES) ROLE------------------------------------------------------------------------------------------------------ 2.6 e9cec9aec697d8b9d450edd32860ecd363f2f3174c8338beb5f809422d182c63 1374 targets 2.7 9f08005dff552038f0ad2f46b8e65ff3d25641747d3912e3ea8da6785046561a 1374 targets 3.1 e876b57b2444813cd474523b9c74aacacc238230b288a22bccece9caf2862197 1374 targets 3.2 4a8c62881c6237b4c1434125661cddf09434d37c6ef26bf26bfaef0b8c5e2f05 1374 targets 3.3 2d4f890b7eddb390285e3afea9be98a078c2acd2fb311da8c9048e3d1e4864d3 1374 targets edge 878c1b1d668830f01c2b1622ebf1656e32ce830850775d26a387b2f11f541239 1374 targets latest 24a36bbc059b1345b7e8be0df20f1b23caa3602e85d42fff7ecd9d0bd255de56 1377 targets
輸出顯示了可用標(biāo)記的名稱,與該標(biāo)記關(guān)聯(lián)的圖像清單的十六進(jìn)制編碼的 sha256 摘要,清單的大小以及將此標(biāo)記簽署到存儲(chǔ)庫(kù)中的公證角色?!澳繕?biāo)”角色是簡(jiǎn)單存儲(chǔ)庫(kù)中最常見(jiàn)的角色。當(dāng)存儲(chǔ)庫(kù)擁有(或期望)擁有協(xié)作者時(shí),您可以根據(jù)管理員選擇如何組織他們的協(xié)作者的方式,將其他“委派”角色列為簽名者。
當(dāng)你運(yùn)行一個(gè)docker pull
命令時(shí),Docker 引擎使用一個(gè)集成的公證庫(kù)(與公證人 CLI 相同)來(lái)請(qǐng)求將標(biāo)簽映射到你感興趣的一個(gè)標(biāo)簽的 sha256 摘要中(或者如果你通過(guò)--all
標(biāo)志,客戶端會(huì)使用列表操作高效地檢索所有映射)。驗(yàn)證了信任數(shù)據(jù)上的簽名后,客戶端將指示引擎執(zhí)行“按摘要拉取”。在此拉動(dòng)過(guò)程中,引擎使用 sha256 校驗(yàn)和作為內(nèi)容地址來(lái)請(qǐng)求并驗(yàn)證 Docker 注冊(cè)表中的圖像清單。
公證人在其運(yùn)行的主機(jī)上生成并存儲(chǔ)簽名密鑰。這意味著 Docker Hub 不能從信任數(shù)據(jù)中刪除標(biāo)簽,必須使用公證客戶端刪除它們。你可以用notary remove
命令來(lái)做到這一點(diǎn)。同樣,您必須指示它與正確的公證服務(wù)器通話(注意,既不是您,也不是作者有權(quán)從官方的高山資料庫(kù)刪除標(biāo)簽,下面的輸出僅用于演示):
$ notary -s https://notary.docker.io -d ~/.docker/trust remove docker.io/library/alpine 2.6Removal of 2.6 from docker.io/library/alpine staged for next publish.
在前面的示例中,輸出消息指示僅刪除已分階段。執(zhí)行任何寫(xiě)入操作時(shí),它們被分段到一個(gè)更改列表中。該列表在下一次notary publish
為該存儲(chǔ)庫(kù)運(yùn)行時(shí)應(yīng)用于最新版本的信任存儲(chǔ)庫(kù)。
您可以通過(guò)運(yùn)行notary status
修改后的存儲(chǔ)庫(kù)來(lái)查看未完成的更改。該status
子命令是脫機(jī)操作,因此,不需要-s
標(biāo)志,但它將忽略的標(biāo)志,如果提供的。未能為-d
標(biāo)志提供正確的值可能會(huì)顯示錯(cuò)誤的(可能是空的)更改列表:
$ notary -d ~/.docker/trust status docker.io/library/alpine Unpublished changes for docker.io/library/alpine:action scope type path----------------------------------------------------delete targets target 2.6$ notary -s https://notary.docker.io publish docker.io/library/alpine
冗長(zhǎng)而繁瑣的是,總是必須手動(dòng)為大多數(shù)命令提供-s
和-d
標(biāo)志。創(chuàng)建預(yù)配置的 Notary 命令版本的簡(jiǎn)單方法是通過(guò)別名。將以下內(nèi)容添加到您的.bashrc
或同等設(shè)備:
alias dockernotary="notary -s https://notary.docker.io -d ~/.docker/trust"
更高級(jí)的配置方法和附加選項(xiàng)可以在配置文檔中找到并運(yùn)行notary --help
。