【问题标题】:Vault init through curl api using PGP keys failed使用 PGP 密钥通过 curl api 进行 Vault 初始化失败
【发布时间】:2020-11-27 21:14:33
【问题描述】:

我正在尝试使用 api 初始化 hashcorp vault。

payload.json:

{
 "secret_shares": 2,
 "secret_threshold": 2,
 "pgp_keys": [
            "sample_pub_1.asc",
            "sample_pub_2.asc"
        ]
}

当我执行以下命令时:

curl     --request PUT     --data @payload.json     http://localhost:8200/v1/sys/init

出现以下错误:

{"errors":["invalid seal configuration:错误解码给定PGP key:>输入字节6处非法base64数据"]}

但是如果我用命令行初始化 Vault 一切正常:

vault operator init -key-shares=2 -key-threshold=2 -pgp-keys="sample_pub_1.asc, sample_pub_2.asc"

下面是输出:

Unseal Key 1: wcBMA3EOVuvAOcf6AQgAhm4FpWmwhU9BV8jaYLuL8gyzhpQgPs76ByF/v5XFYj3PKaVcm2U3nzn7dablYMheGkFbOytCQ8G1guJrQ756+9t0dotAzghEeCUDwwIEU5lqENR/nAJXT4NvgrycASfS5OKv7vT6L/L8GokiHPSdBdouI3/4GyHKygrqaAUjbmNDUrgXDEfaWMkNv58yJE1tVpjYuKh8pWqNqJgSyDdkrXUt4AEY6yLTsLaCkOuu0j1sVE5D3huE0UV8u59qDwf9FusACgoyhyqyNwXqMn0pGet0hebk9pY/F293LWUr2zp7otbo5sX7H+086pl4plxUHo3GN/vhYnfwIVvJbCz68tLgAeShAyKfKCX6kFz+QX3LCkLW4UOS4Dngt+EvS+B24sFDtIvgPOZPueiPgmxwj5Evv0GzPm8iDvnrxvaWU1vxl+YlP1f3PI+rs+oBCndlBL0lVpFTDbtVLrFb/szxj+rRwKnz0oOZ4Djh2ufgDeQIlx/Zw6T1y+41jj8ITwn24uo5ChnhmeIA

Unseal Key 2: wcBMA0Eqk591x+XTAQgAQDi/V1yGqHlrSDWJ2SLeiqaLzpNrcbC5cB4+CxzkZsiVgjrd5YitULL7TmWkYl43VSPxs0hnk3O+uRUp+D4gVjUWykpGmdhwB5CiWHwNMzuIUE1E/UQVMQ39OLnG+C3VgzRe8HNhEr6pkbLFgSQLlr/459bgEyAPrW/U1PrHrH+hf+eE0me5/hUQWBfqcZHeY1Zp3A97UUBV54yarSgfRyqluiXe5j6L2X0qw5Ge/luRR8xPygyx3JqlIlPCj6liMS/to/yRGOKvYAXjXdflpBeodx3cSUOMmBTrzk1h6otM8LR28dp7qS+0qX0mWHFAfElMrJh9tz5PpWY5WIdyJNLgAeQO/Bvz4UMJLBAzEcCy2G7L4fDf4I/gSuHJROC+4lgAeaTgv+bRQCmvD4SEQYUJX3IP0cwMgskkys/vwUMqnZSNMS0gXayRvVSJ5YAHsynuixp +aE1x6UBiEw6cjVX7wwfupvdg4PTh4GPgG+TjTQDF06tQigWmpxio1JAa4jdU9uzhWbMA

初始根令牌:aa3cccce-5ac8-4aef-7d50-6fab16e89ee4

【问题讨论】:

  • 键是 base64 编码的吗?
  • 是的,我使用以下命令导出:gpg -a --export ADXX0SS9B4 > sample_pub_1.asc

标签: pgp hashicorp-vault


【解决方案1】:

您的 pgp_keys 可能没有 base64 编码;根据official Vault documentation 使用 curl init 时:

密钥必须从其原始二进制表示进行 base64 编码

【讨论】:

  • 是的,我使用以下命令导出:gpg -a --export ADXX0SS9B4 > sample_pub_1.asc
【解决方案2】:

您必须在 Base64 中对原始二进制输出进行编码。

在我的 Mac 上:

gpg2 --export sample@stackoverflow.com | base64 -b 0

或者在 Linux 上:

gpg2 --export sample@stackoverflow.com | base64 -w 0

【讨论】:

    【解决方案3】:

    vault 命令和 HTTP API 在使用上是有区别的。

    虽然该命令可以从磁盘读取文件并允许文件名作为参数,但您的示例正确显示:

    vault operator init -key-shares=2 -key-threshold=2 -pgp-keys="sample_pub_1.asc, sample_pub_2.asc"
    

    HTTP API 需要此字段中的 base64 键而不是文件名。

    {  "secret_shares": 2,  "secret_threshold": 2,  "pgp_keys": [
            "mQGNBF/ALSkBDADoIAuvrTNbvkuZZTl28Pwh7i0aa.......",
            "mQGNBF/ALSkBDADoIAuvrTNbvkuZZTl28Pwh7i0aa......."
        ]
    

    }

    这就是错误指示位置编号 6 中的坏字节的原因,因为它试图将字符串“sample_pub_1.asc”解码为 base64 有效值。

    最好的问候

    【讨论】:

      猜你喜欢
      • 2020-12-31
      • 1970-01-01
      • 2019-05-19
      • 1970-01-01
      • 2022-01-26
      • 2012-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多