程式碼簽名
目錄
什麼是程式碼簽名?
程式碼簽名是將加密簽名應用於軟體工件(例如 Docker 映象)以驗證其完整性和真實性的過程。透過簽署映象,您可以確保自簽署以來它未被更改,並且它源自可信來源。
在 Docker 強化映象 (DHI) 的上下文中,程式碼簽名是使用 Cosign 實現的,Cosign 是 Sigstore 專案開發的一個工具。Cosign 能夠安全且可驗證地簽署容器映象,從而增強軟體供應鏈中的信任和安全性。
為什麼程式碼簽名很重要?
程式碼簽名在現代軟體開發和網路安全中起著至關重要的作用
- 真實性:驗證映象是否由可信來源建立。
- 完整性:確保自簽署以來映象未被篡改。
- 合規性:幫助滿足法規和組織安全要求。
Docker 強化映象程式碼簽名
每個 DHI 都使用 Cosign 進行加密簽名,確保映象未被篡改並源自可信來源。
為什麼要簽署自己的映象?
Docker 強化映象由 Docker 簽名以證明其來源和完整性,但如果您正在構建擴充套件或使用 DHI 作為基礎的應用程式映象,您也應該簽署自己的映象。
透過簽署自己的映象,您可以
- 證明映象由您的團隊或管道構建
- 確保您的構建在推送後未被篡改
- 支援 SLSA 等軟體供應鏈框架
- 在部署工作流中啟用映象驗證
這在您頻繁構建和推送映象的 CI/CD 環境中尤為重要,或在任何需要審計映象來源的場景中。
如何檢視和使用程式碼簽名
檢視簽名
您可以使用 Docker Scout 或 Cosign 驗證 Docker 強化映象是否已簽名且受信任。
要列出附加到映象的所有證明(包括簽名元資料),請使用以下命令
$ docker scout attest list <image-name>:<tag> --platform <platform>
要驗證特定的已簽名證明(例如 SBOM、VEX、來源)
$ docker scout attest get \
--predicate-type <predicate-uri> \
--verify \
<image-name>:<tag> --platform <platform>
例如:
$ docker scout attest get \
--predicate-type https://openvex.dev/ns/v0.2.0 \
--verify \
docs/dhi-python:3.13 --platform linux/amd64
如果有效,Docker Scout 將確認簽名並顯示簽名有效負載,以及驗證映象的等效 Cosign 命令。
簽署映象
要簽署 Docker 映象,請使用 Cosign。將 <image-name>:<tag>
替換為映象名稱和標籤。
$ cosign sign <image-name>:<tag>
此命令將提示您透過 OIDC 提供商(如 GitHub、Google 或 Microsoft)進行身份驗證。成功進行身份驗證後,Cosign 將生成一個短期證書並簽署映象。簽名將儲存在透明日誌中,並與登錄檔中的映象相關聯。