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身份验证

Download history 77/week @ 2024-07-01 45/week @ 2024-07-08 41/week @ 2024-08-05 86/week @ 2024-08-12

每月下载 127

MPL-2.0 许可证

70KB
1.5K SLoC

secretgarden

secretgarden 是一个自包含的CLI,用于生成和安全的存储如下的秘密

  • 密码
  • SSH密钥
  • TLS/X.509证书
  • 不透明值

它适用于自己管理一小套系统的系统管理员。秘密通过从您的SSH密钥派生的密钥(与NaCl的secretboxargon2散列一起)来保持安全。

交互模型强烈受到名为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