11.8. 签名镜像服务(glance)镜像


在配置 Image Service (glance)以验证镜像时,您必须对这些镜像进行签名,然后才能上传这些镜像。使用 openssl 命令,为镜像签名存储在 Key Manager 服务(barbican)中的密钥,然后使用附带的镜像属性将镜像上传到镜像服务。在每次使用前验证镜像的签名,如果签名不匹配,实例构建过程会失败。

限制:

  • 签名验证基于 openSSL _rsa_sig_verify (),如果密钥长度不是 1024,它目前会在镜像服务中引发 InvalidSignature 异常。出现这个问题的原因是 OpenSSL 3.0.7 中的回归。签名验证可以正常工作,密钥长度为 2048 和 OpenSSL 3.0.2。
  • OpenSSL 不支持 SHA256 算法。您必须使用 SHA512 或更高版本来创建签名的镜像。

流程

  1. 使用 openssl 命令创建密钥和证书:

    • 创建私钥:

      $ openssl genrsa -out private_key.pem 1024
      Copy to Clipboard Toggle word wrap
    • 创建公钥:

      $ openssl rsa -pubout -in private_key.pem -out public_key.pem
      Copy to Clipboard Toggle word wrap
    • 创建证书:

      $ openssl req -new -key private_key.pem -out cert_request.csr
      Copy to Clipboard Toggle word wrap
    • 提示时,请输入要包含在您的证书请求中的详情:

      $ openssl x509 -req -days 14 -in cert_request.csr -signkey private_key.pem -out new_cert.crt
      Copy to Clipboard Toggle word wrap
  2. 将证书上传到 Key Manager 服务,该服务存储在 secret 存储中

    $ openstack secret store --name test --algorithm RSA --secret-type certificate \
      --payload-content-type "application/octet-stream" \
      --payload-content-encoding base64 \
      --payload "$(base64 new_cert.crt)"
    Copy to Clipboard Toggle word wrap

    输出示例:

    +---------------+-----------------------------------------------------------------------+
    | Field         | Value                                                                 |
    +---------------+-----------------------------------------------------------------------+
    | Secret href   | http://127.0.0.1:9311/v1/secrets/cd7cc675-e573-419c-8fff-33a72734a243 |
    +---------------+-----------------------------------------------------------------------+
    Copy to Clipboard Toggle word wrap
    注意

    记录证书 UUID,以便在稍后的步骤中使用。在本例中,UUID 是 cd7cc675-e573-419c-8fff-33a72734a243

  3. 检索镜像并创建签名:

    • 检索镜像:

      $ echo <This is my image> > <myimage>
      Copy to Clipboard Toggle word wrap
    • 使用 private_key.pem 为镜像签名并生成 .signature 文件。例如:

      $ openssl dgst -sha512 -sign private_key.pem -sigopt rsa_padding_mode:pss -out myimage.signature myimage
      Copy to Clipboard Toggle word wrap
    • .signature 文件转换为 Base64 格式:

      $ base64 -w 0 myimage.signature > myimage.signature.b64
      Copy to Clipboard Toggle word wrap
    • 将 Base64 值加载到上传镜像时使用的变量中:

      $ image_signature=$(cat myimage.signature.b64)
      Copy to Clipboard Toggle word wrap
  4. 将具有有效签名属性的镜像上传到镜像服务:

    $ openstack image-create \
      --name <my_signed_image> \
      --container-format bare \
      --disk-format qcow2 \
      --property img_signature="$image_signature" \
      --property img_signature_certificate_uuid="$cert_uuid" \
      --property img_signature_hash_method='SHA-512' \
      --property img_signature_key_type='RSA-PSS' < myimage
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat