Использование http api для init vault не принимает ключ base64 gpg, но CLI делает - PullRequest
0 голосов
/ 20 июня 2019

Я использую http api для инициализации хранилища и шифрования ключей печати и корневого токена, но я получаю

{"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 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?

Спасибо

...