3个不稳定版本
0.100.0 | 2022年8月2日 |
---|---|
0.99.1 | 2020年1月28日 |
0.99.0 | 2020年1月21日 |
在 密码学 中排名 1815
每月下载量 23
99KB
1.5K SLoC
ssclient
SecureStore伴随工具
ssclient
是 SecureStore 开放机密格式(rust)实现的伴随工具,尽管它可以用于创建和管理任何兼容 SecureStore 实现的 SecureStore 机密文件。该工具用于在 Rust 代码中创建或消费 SecureStore 机密的伴随包可以在 同一仓库中找到。根据 SecureStore 开放机密协议的承诺,使用此工具创建或修改的保险库也可以由其他语言使用,例如,与 SecureStore.NET 库 一起。
SecureStore开放格式
安装
ssclient
在 crates.io 上作为可安装的二进制 crate 发布,可以直接通过 Rust 包管理器 cargo
进行安装
~> cargo install ssclient
用法
使用 ssclient
的可用命令行选项可以通过运行 ssclient -h
来查看基本选项列表,或者运行 ssclient --help
来查看扩展用法信息
USAGE:
ssclient [OPTIONS] [SUBCOMMAND]
OPTIONS:
--export-key <EXPORT_PATH> Exports a key equivalent to the supplied password.
-h, --help Print help information
-k, --key <KEYFILE> Use key stored at path KEYFILE.
--no-vcs Do not exclude private key in vcs ignore file.
-p, --password Prompt for password used to derive key.
In headless environments, takes the password as an argument.
-s, --store <STORE> Specify the path to the secrets store to use for all
operations. [default: secrets.json]
-V, --version Print version information
SUBCOMMANDS:
create Create a new SecureStore vault for secrets storage.
See `ssclient help create` for more info
delete Remove a secret from the store.
See `ssclient help set` for more info
get Decrypt and retrieve secrets.
See `ssclient help get` for more info
help Print this message or the help of the given subcommand(s)
set Add or update an encrypted value to/in the store.
See `ssclient help set` for more info
可以通过执行 ssclient --help
来查看帮助的完整版本,而通过运行 ssclient help [create|set|get|delete]
可以获得单个命令的帮助
命令行界面已优化以减少处理机密时的摩擦,应该很容易管理新或现有项目的机密,并且开发人员不应犹豫或推迟保护机密。
创建新的机密存储库
机密信息存储在人类可读、格式化的JSON文件中,旨在与依赖它们的相同代码一起添加到版本控制中。文件格式经过精心设计,以适应版本控制系统,并能够抵抗合并/重新基。可以使用ssclient create
子命令创建新的存储库。存储库始终加密(在磁盘和SecureStore API客户端的内存中),API和ssclient
前端支持多种加密密钥来源选项,包括基于密码的加密/解密、应用程序/API为您生成加密密钥文件或提供自己的密钥文件。
典型场景是使用密码创建新的存储库,从中自动(且安全地)派生所需的加密密钥,并导出兼容的加密密钥副本。这使您可以使用基于密码的加密/解密功能方便地与ssclient
交互,同时将加密密钥安全地部署到生产服务器,在那里可以使用它以无密码方式解密密钥文件。
在命令行中使用基于密码的加密创建新存储库
~> ssclient create secrets.json
Password: ***********
Confirm password: ***********
其中secrets.json
是要创建的存储库的名称。如果没有指定存储库名称,则默认使用secrets.json
。
要使用基于密钥的认证(即没有使用密码解密的选项),请使用以下命令代替
ssclient create secrets.json -k secrets.key
如果secrets.key
存在且是有效的密钥文件,它将用于加密位于secrets.json
的新存储库。如果secrets.key
不存在,将使用CSPRNG为您安全地生成新密钥,并将其副本保存到提供的路径(在此例中为secrets.key
),新存储库本身将被保存在提供的路径上(例如本例中的secrets.json
)。
如果没有提供-p
/--password
或-
/--keyfile
,则ssclient
默认使用基于密码的加密/解密以提高方便性。
在基于密码的加密中,您可以使用--export-key PATH
将密码派生的密钥副本导出到PATH
,以便可以使用密钥文件与SecureStore API一起以无密码方式解密单个机密,同时您可以使用密码而不是密钥文件,通过ssclient
在命令行中继续添加、删除或更新机密。
~> ssclient create secrets.json --export-key secrets.key
Password: ***********
Confirm password: ***********
# Now you can use `ssclient -p` with your old password
# or `ssclient -k secrets.key` to encrypt/decrypt with
# the same keys.
添加或更新机密
创建存储库后,您自然想要向其中添加一个机密。机密通过ssclient set
子命令逐个添加。
机密可以直接作为命令行参数提供(提示:在命令前加一个空格可以将它排除在大多数shell的历史文件之外)
ssclient set aws:s3:accesskey 715a868e-3c83-11ea-99bd-af944d8d3940
或交互式地以增加安全性(以避免shell历史记录)
~> ssclient set aws:s3:accesskey
Password: ********
Value: 715a868e-3c83-11ea-99bd-af944d8d3940
如果已存在相同名称的机密,它将不进行确认而覆盖。幸运的是,您正在遵循SecureStore的最佳实践,将机密文件与代码一起存储和版本控制,因此您可以通过使用git checkout
或您VCS提供的任何等效操作来轻松撤销此类错误!
检索和解密单个机密
与 ssclient set
相似,ssclient get
可以用来检索单个密钥。与其他所有子命令一样,可以使用 -s
/--store
指定要使用的存储库名称,默认为 secrets.json
,加密/解密模式可以通过 -p
/--password
或 -k/--key KEY
选择,在交互式环境中默认为 --password
。
~> ssclient -k secrets.key get aws:s3:accesskey
715a868e-3c83-11ea-99bd-af944d8d3940
虽然 ssclient
接口仅支持将基于文本的密钥保存到安全存储库中,但 SecureStore API 可以用来(例如通过 securestore 或 (SecureStore.NET)https://github.com/neosmart/SecureStore)将二进制密钥存储到安全存储库。 ssclient
可以检索这些二进制密钥,并以 base64 编码的字符串形式返回,前面加上 base64:
,例如 base64:cGFzc3dvcmQ=
。
在无头环境中使用时,密码可以直接作为命令行参数指定(在 -p
/--password
之后)。我们不推荐这样做,请导出并使用密钥文件!
导出所有密钥
ssclient get
支持可选的 -
/--all
参数,可以导出存储库中的所有 (key, secret)
对。SecureStore 是一种开放格式,我们相信您应该始终能够以通用格式获取数据,但请谨慎使用此选项!
可选的 --format
开关可以用来影响导出数据的输出格式。默认为 json
,但可以使用 text
代替(请记住,在 text
模式下,不会进行转义,正确解析结果可能很复杂)。
~> ssclient get --all -k secrets.key
[
{
"key": "aws:s3:accesskey",
"value": "715a868e-3c83-11ea-99bd-af944d8d3940"
},
{
"key": "secret",
"value": "password"
}
]
在 json
模式下,输出保证是有效的 JSON,是一个包含对象的 JSON 数组,每个对象都有一个 key
(密钥名称)和一个 value
(密钥本身)。
在文本模式下,每个结果都打印在新的一行上
~> ssclient get --all --format text --key secrets.key
aws:s3:accesskey: 715a868e-3c83-11ea-99bd-af944d8d3940
secret: password
注意,简单的基于 :
的文本分割并没有正确解析结果。
删除密钥
可以通过 ssclient delete
子命令从存储库中删除密钥。如果请求的密钥在存储库中找不到,将显示错误。
~> ssclient delete aws:s3:accesskey
Password: ********
许可和版权
ssclient
由 NeoSmart Technologies 的 Mahmoud Al-Qudsi 创建,版权所有 NeoSmart Technologies 2019-2022。《ssclient》公开发布,没有任何保证,希望它可能有益,双重许可(您可选择)在 MIT 和 Apache 2.0 公共许可证下。
贡献
欢迎以错误报告和拉取请求的形式提交贡献,以及实现 SecureStore 的其他语言的新项目。
依赖关系
~3.5–5.5MB
~111K SLoC