文件系统密钥库

使用此页面设置使用文件系统作为持久密钥库的 KES 服务器。

K E S C l i e n t K E S S e r v e r F i l e s y s t e m
仅供测试

普通文件系统不提供对存储密钥的任何保护。

仅将此页面上的步骤用于测试目的。

现有密钥和证书
如果您已经拥有 TLS 私钥和证书(例如来自 WebPKI 或内部证书颁发机构),则可以使用它们。请记住调整 tls 配置部分。

KES 服务器设置

  1. 生成 KES 服务器私钥和证书

    为 KES 服务器生成 TLS 私钥和证书。

    KES 服务器是 默认安全的,并且只能在 TLS 启用时运行。在本指南中,我们出于简便起见使用自签名证书。

    以下命令会为 IP 127.0.0.1 和 DNS 名称 localhost 生成一个新的 TLS 私钥 (private.key) 和一个自签名的 X.509 证书 (public.crt)

    $ kes identity new --ip "127.0.0.1" localhost
    
      Private key:  private.key
      Certificate:  public.crt
      Identity:     2e897f99a779cf5dd147e58de0fe55a494f546f4dcae8bc9e5426d2b5cd35680
    
  2. 生成客户端凭据

    客户端应用程序需要凭据才能访问 KES 服务器。以下命令会生成一对新的 TLS 私钥/公钥。

    $ kes identity new --key=client.key --cert=client.crt MyApp
    
      Private key:  client.key
      Certificate:  client.crt
      Identity:     02ef5321ca409dbc7b10e7e8ee44d1c3b91e4bf6e2198befdebee6312745267b
    

    身份 02ef5321ca409dbc7b10e7e8ee44d1c3b91e4bf6e2198befdebee6312745267bclient.crt 中公钥的唯一指纹。您可以随时重新计算指纹。

    $ kes identity of client.crt
    
      Identity:  02ef5321ca409dbc7b10e7e8ee44d1c3b91e4bf6e2198befdebee6312745267b
    
  3. 配置 KES 服务器

    创建 KES 服务器配置文件:config.yml。确保 policy 部分中的身份与您的 client.crt 身份匹配。

    address: 0.0.0.0:7373 # Listen on all network interfaces on port 7373
    
    admin:
      identity: disabled  # We disable the admin identity since we don't need it in this guide 
    
    tls:
      key: private.key    # The KES server TLS private key
      cert: public.crt    # The KES server TLS certificate
    
    policy:
      my-app: 
        allow:
        - /v1/key/create/my-key*
        - /v1/key/generate/my-key*
        - /v1/key/decrypt/my-key*
        identities:
        - 02ef5321ca409dbc7b10e7e8ee44d1c3b91e4bf6e2198befdebee6312745267b # Use the identity of your client.crt
    
    keystore:
      fs:
        path: ./keys # Choose a directory for the secret keys
    
  4. 启动 KES 服务器

    kes server --config config.yml --auth off
    
    Linux 交换空间保护

    在 Linux 环境中,KES 可以使用 mlock 系统调用来防止操作系统将内存中的数据写入磁盘(交换)。这可以防止敏感数据的泄露。

    使用以下命令允许 KES 使用 mlock 系统调用,而无需以 root 权限运行。

    sudo setcap cap_ipc_lock=+ep $(readlink -f $(which kes))
    

    启动具有内存保护的 KES 服务器实例。

    kes server --config config.yml --auth off --mlock
    

KES CLI 访问

  1. 设置 KES_SERVER 端点

    此变量告诉 KES CLI 要访问哪个 KES 服务器。

    export KES_SERVER=https://127.0.0.1:7373
    
  2. 使用客户端凭据

    这些变量告诉 KES CLI 要使用哪些凭据来访问 KES 服务器。

    export KES_CLIENT_CERT=client.crt
    
    export KES_CLIENT_KEY=client.key
    
  3. 执行操作

    根据分配的策略执行任何允许的 API 操作。

    在本地运行 KES 用于测试目的时,使用 -k--insecure 标志来生成新的密钥或数据加密密钥。

    例如,我们可以创建一个密钥。

    kes key create my-key-1 -k
    

    然后,我们可以使用该密钥生成一个新的数据加密密钥。

    kes key dek my-key-1 -k
    {
      plaintext : UGgcVBgyQYwxKzve7UJNV5x8aTiPJFoR+s828reNjh0=
      ciphertext: eyJhZWFkIjoiQUVTLTI1Ni1HQ00tSE1BQy1TSEEtMjU2IiwiaWQiOiIxMTc1ZjJjNDMyMjNjNjNmNjY1MDk5ZDExNmU3Yzc4NCIsIml2IjoiVHBtbHpWTDh5a2t4VVREV1RSTU5Tdz09Iiwibm9uY2UiOiJkeGl0R3A3bFB6S21rTE5HIiwiYnl0ZXMiOiJaaWdobEZrTUFuVVBWSG0wZDhSYUNBY3pnRWRsQzJqWFhCK1YxaWl2MXdnYjhBRytuTWx0Y3BGK0RtV1VoNkZaIn0=
    }
    

参考资料