软件供应链安全是指保护创建和部署软件过程中涉及的组件、活动和实践。这些实践之一是在发布软件之前由开发人员对其进行数字签名。数字证书的目的是确保软件未被篡改,接收者可以安全地下载它。
现在,在使用 CI/CD 系统部署软件之前,您可以使用 Travis CI 安全地对其进行签名。
自 2021 年 5 月美国总统发布行政命令以来,软件开发行业,尤其是 CI/CD 社区,在安全意识和功能方面都有了显著提升,这些功能可以提高软件供应商遵守安全软件供应链计划的能力。无论您是小型软件团队还是大型、成熟的软件提供商,您都可能面临以下要求
现代 CI/CD 系统为了简化和自动化满足上述要求的过程,会与工具集成,允许在 CI/CD 流程中生成所需元素。Travis CI 也不例外。
以 Docker 镜像为例,签名是为 Docker 镜像进行数字签名的过程,以确认软件作者的身份,可以把它理解为 PGP 密钥。它可以确保代码未被更改或损害。镜像签名有两种方式
让我们通过图表来了解它在服务器端的工作原理
任何声称支持特定 Docker 分发镜像规范的注册表或运行时都会与各种清单类型进行交互。现在您已经了解了它在服务器端的工作原理,我们再来一步一步地详细介绍一下它在服务器端的工作方式
相等
则表示镜像 未
被篡改。实际上,您可以使用以下命令查询 DockerHub 关于存储库的签名和签署者状态
docker trust inspect --pretty travisci/signatures
这将列出镜像背后的公证人。
现在,让我们看一下该过程在客户端是如何进行的
Travis CI 提供使用 cosign 工具和密钥对您的软件进行签名的功能。
Cosign 是 Sigstore 项目的一部分,它有助于确保安全软件供应链所需的工具。
要使用 Travis CI 对您的软件进行签名,您需要准备一个专用密钥。要获取专用密钥,您有两个选择
如果您使用的是上传到 Travis CI 的密钥,请使用以下示例
keys:
- SSH_KEY_FOR_SIGNING # must match the key identifier set in the UI
env:
secret: “...” # encrypted COSIGN_PASSWORD=... string; see cosign doc
before_script:
- travis_key SSH_KEY_FOR_SIGNING cosign.key # cosign requires the key to be in a file
script:
- cosign sign --key cosign.key [whatever_the_image_identifier_is]
如果您希望在构建作业期间直接从 Hashicorp Vault 获取密钥,请尝试以下操作
vault:
api_url: [single value endpoint address:port] #mandatory
token:
secure: “...” #mandatory
# This will make the default VAULT_ADDR and VAULT_TOKEN available for cosign.
script:
- cosign sign --key hashivault://some-key-identifier [whatever_the_image_identifier_is]
对文件或容器镜像进行签名后,您可以将其部署到指定位置,就像您之前所做的一样。
由于安全签名软件旨在验证发布,因此保护用于签名的密钥非常重要。对于云 CI/CD 系统,存在某些安全注意事项,尤其是针对恶意行为者的攻击面。细节因 CI/CD 提供商而异,例如,取决于构建日志是公开还是私有,向作业提供密钥的具体机制、访问控制和特定设置。
请务必熟悉我们在安全签名软件文档页面中与之相关的部分,以便在您考虑使用 Travis CI 安全签名您的软件时参考。
了解更多