我正在使用http api初始化Vault并对加密密钥和根令牌进行加密,但是我得到了
{"errors":["error decoding given PGP key: illegal base64 data at input byte 21"]}
但是当我使用CLI时,它可以工作。
如何使其适用于http api?
这是使用ubuntu 18.04和gpg(GnuPG)v2.2.4,base64 v8.28,最新的保管库完成的
这是有效的命令行界面命令,并返回加密的密封密钥和根令牌:
./vault operator init -key-shares=2 -key-threshold=2 -address="http://127.0.0.1:8200" -format="json" -root-token-pgp-key="mo.asc" -pgp-keys="mo.asc,mo.asc"
以上内容与使用Vault实例启动时所在的目录相同。
./vault server -config=vaultconfig.hcl
vaultconfig.hcl包含
storage "inmem" {}
listener "tcp" {
address = "127.0.0.1:8200"
tls_disable = 1
}
mo.asc使用以下方法获得:
gpg --gen-key
gpg --export <generated key> | base64 > mo.asc
使用不可用的http api的命令
curl --request PUT --data @payload.json http://127.0.0.1:8200/v1/sys/init
payload.json是
{
"secret_shares": 2,
"secret_threshold": 2,
"pgp_keys": [
"mo.asc",
"mo.asc"
],
"root_token_pgp_key": "mo.asc"
}
这将返回:
{"errors":["error decoding given PGP key: illegal base64 data at input byte 21"]}
但是如果我将payload.json更改为
{
"secret_shares": 2,
"secret_threshold": 2
}
它可以返回
{
"keys": [
"227e3b43a76b54008249b39285ae1063db0e2bff94bad0f349f4b7fa89195fb7d7",
"2ab2f5ec67191c26735116f5a1cc9b3bab406eff7b57d9632359a0797f2cf5fd3e"
],
"keys_base64": [
"In47Q6drVACCSbOSha4QY9sOK/+UutDzSfS3+okZX7fX",
"KrL17GcZHCZzURb1ocybO6tAbv97V9ljI1mgeX8s9f0+"
],
"root_token": "s.s2GZsomY2tGJfQzHGFjqlYNu"
}
似乎CLI命令接受我的gpg已被base64加密,但是http api不接受它已被加密。尽管CLI似乎在下面使用http api。 http api有效,但是仅当我将asc文件添加到payload.json时,它才起作用。
我想念什么吗? 我怎么想,以便通过http api初始化Vault时获得加密的根令牌和密钥?
谢谢