in-toto/in-toto-golang
GitHub: in-toto/in-toto-golang
这是一个旨在保障软件供应链完整性的 in-toto 框架 Go 语言实现,支持对软件构建流程进行定义、签名及验证。
Stars: 147 | Forks: 54
# in-toto 的 Go 实现
[](https://github.com/in-toto/in-toto-golang/actions?query=workflow%3Abuild) [](https://coveralls.io/github/in-toto/in-toto-golang) [](https://pkg.go.dev/github.com/in-toto/in-toto-golang) [](https://goreportcard.com/report/github.com/in-toto/in-toto-golang)
[](https://api.securityscorecards.dev/projects/github.com/in-toto/in-toto-golang)
[in-toto specification](https://github.com/in-toto/docs/blob/master/in-toto-spec.md) 的 Go 实现。
## 文档
若要阅读文档及示例,请运行:
```
godoc -http :8080
```
并导航至 `localhost:8080/pkg/github.com/in-toto/in-toto-golang/`
或者,您也可以使用 [pkg.go.dev](https://pkg.go.dev/github.com/in-toto/in-toto-golang)。
## 示例
一个非常简单的示例,助您快速上手:
```
package main
import (
"time"
toto "github.com/in-toto/in-toto-golang/in_toto"
)
func main() {
t := time.Now()
t = t.Add(30 * 24 * time.Hour)
var keys = make(map[string]toto.Key)
var metablock = toto.Metablock{
Signed: toto.Layout{
Type: "layout",
Expires: t.Format("2006-01-02T15:04:05Z"),
Steps: []toto.Step{},
Inspect: []toto.Inspection{},
Keys: keys,
},
}
var key toto.Key
key.LoadKey("keys/alice", "rsassa-pss-sha256", []string{"sha256", "sha512"})
metablock.Sign(key)
metablock.Dump("root.layout")
}
```
## 构建
下载源码,运行 `make build`。
## CLI
CLI 参考文档可在自动生成的 [docs](doc/in-toto.md) 中找到。
## 与 SPIFFE/SPIRE 的集成
此 in-toto 实现已与 SPIFFE/SPIRE 集成。
该集成得益于
[ITE-7](https://github.com/in-toto/ITE/blob/master/ITE/7/README.adoc),这是一项为 in-toto 添加 X.509 签名支持的增强功能。
### 运行演示
若要运行演示,请拉取源代码,安装 Go,并运行
`make test-verify`。这将使用 openssl 生成证书链。
若要使用 SPIRE 运行演示,请拉取源代码,安装 Go 和 Docker,
并运行 `make test-spiffe-verify`。
会生成符合 SPIFFE 标准的叶证书,其中包含与职能人员相对应的 SVID。
in-toto 会使用这些证书来签署链接元数据和布局策略。
在 in-toto 验证过程中,会检查证书约束,以确保构建步骤的链接元数据是使用正确的 SVID 签署的。
### 布局证书约束
目前支持以下约束:
```
{
"cert_constraints": [{
"common_name": "write-code.example.com",
"dns_names": [
""
],
"emails": [
""
],
"organizations": [
"*"
],
"roots": [
"*"
],
"uris": [
"spiffe://example.com/write-code"
]
}, {
"uris": [],
"common_names": ["Some User"]
}]
}
```
## (尚)不支持的功能
此 Golang 实现主要专注于 admission controllers 和 kubectl 插件中的验证功能。
因此,其重点是提供一套强大、可审计的核心功能集,而不是广泛(且可能不稳定)的功能集。
换句话说,我们认为当前的功能集已足够稳定,可用于生产环境。
如果您的用例需要其中任何一项功能,请告知我们,我们将尽快提供支持。
同时,我们也欢迎通过 Pull Request 来添加新功能!
* [GPG keys](https://github.com/in-toto/in-toto-golang/issues/26)
标签:CI/CD安全, DevSecOps, EVTX分析, Go实现, Go库, Go语言, in-toto, Llama, SPIFFE, SPIRE, 上游代理, 代码签名, 供应链攻击防护, 元数据签名, 布局验证, 开源安全工具, 日志审计, 程序破解, 请求拦截, 软件供应链安全, 软件完整性, 远程方法调用, 逆向工程平台