8个版本 (4个重大更新)
0.5.0 | 2024年8月11日 |
---|---|
0.4.1 | 2024年7月7日 |
0.4.0 | 2023年5月31日 |
0.3.1 | 2023年4月7日 |
0.1.2 | 2020年9月16日 |
#33 在 身份验证
每月下载 127 次
70KB
1.5K SLoC
secretgarden
secretgarden
是一个自包含的CLI,用于生成和安全的存储如下的秘密
- 密码
- SSH密钥
- TLS/X.509证书
- 不透明值
它适用于自己管理一小套系统的系统管理员。秘密通过从您的SSH密钥派生的密钥(与NaCl的secretbox和argon2散列一起)来保持安全。
交互模型强烈受到名为CredHub的凭证服务器的影响,其中自动部署工具可以请求一个秘密,该秘密
- 安全存储
- 如果不存在,则自动生成
- 如果秘密的选项已更改,则重新生成
- 根据其他证书(例如具有子证书的CA)轻松生成
安装
目前,secretgarden只能从源代码安装。通过rustup或操作系统包安装Rust,然后在目录内运行$ cargo install --path .
。(确保~/.cargo/bin
在您的$PATH
中。)
使用方法
先决条件
在开始之前,请确保您正在运行ssh-agent,并且已向其中添加了密钥
$ ssh-add -l
256 SHA256:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA me@home (ED25519)
...
如果$ ssh-add -l
返回空,则使用$ ssh-add
添加您的SSH密钥。
注意:仅接受RSA和ED25519密钥。DSA和ECDSA密钥会生成随机签名,这使得它们无法用于密钥派生。
如果它返回错误,你很可能没有运行 ssh-agent
。你可以使用以下命令在你的当前shell中启动它:$ eval $(ssh-agent)
,但可能需要将此命令添加到你的登录脚本中。
获取自动生成的密钥
密钥通过 secretgarden
的子命令检索。例如,要检索一个名为 mysql-root-password
的32位随机密码,请运行
$ secretgarden password mysql-root-password
nEIn5JwTCpaIrGGpCehuP6rVbCgKLWow
如果此密码不存在,它将被生成并存储。
SSH密钥
SSH密钥也可以类似生成
$ secretgarden ssh-key jumpbox-ssh-key
-----BEGIN OPENSSH PRIVATE KEY-----
...
-----END OPENSSH PRIVATE KEY-----
可以使用 --public
获取公钥
$ secretgarden ssh-key jumpbox-ssh-key --public
ssh-ed25519 ...
X.509证书
X.509证书可以以多种格式获取,并由其他由secretgarden管理的证书签名。
如果没有CA生成证书,它将是自签名的。如果配置了以下CA
[x509.example-ca]
is-ca = true
[x509.example-child]
ca = "example-ca"
那么 example-child
将由 example-ca
签名。请注意,example-ca
必须首先生成,并且必须未过期。
这些证书及其公钥/私钥可以逐个检索,也可以一次性全部检索。例如
$ secretgarden x509 example-child --certficate
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
$ secretgarden x509 example-child --certifcate --private-key
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
更改配置
每个密钥类型都有可以更改的配置,从密码长度到复杂的X.509选项。此配置从当前目录中的 secretgarden.toml
读取。例如
[password.mysql-root-password]
length = 64
[ssh-key.jumpbox-ssh-key]
type = "rsa"
bits = 4096
[x509.ca]
is-ca = true
要查看密钥类型支持哪些选项,请运行 secretgarden SECRET-TYPE --help
$ secretgarden ssh-key --help
Get or generate an SSH key.
Will output the private key by default.
Available config options:
* `type`: the type of SSH key (`rsa`, `dsa`, `ecdsa`, or `ed-25519`; defaults to `ed-25519`).
* `bits`: the number of bits in the key (only supported for `rsa` and `ecdsa` keys).
...
存储不透明值
有些密钥可能是由你指定的(API令牌等),但将它们与生成的密钥一起存储仍然很有用。
可以使用 secretgarden set-opaque
设置不透明(非生成的)值,并使用 secretgarden opaque
检索它们
$ secretgarden set-opaque api-token
<enter secret value>
$ secretgarden opaque api-token
<your secret value>
依赖项
~30–46MB
~557K SLoC