图像签名验证

Glance 具有使用数字签名和非对称加密执行图像验证的能力。要触发此功能,您必须定义特定的图像属性(如下所述),并在本地 Barbican 安装中存储使用您的私钥签名的证书。

当图像上存在图像属性时,Glance 将在存储之前,根据这些属性验证上传的图像数据。如果验证不成功,上传将失败,并且图像将被删除。

此外,其他服务(例如 Nova)可以使用图像属性在从 Glance 下载图像时执行数据验证。

需求

Barbican 密钥管理器 - 请参阅 https://docs.openstack.org/barbican/2025.2/contributor/devstack.html

配置

可以修改 etc/glance-api.conf 以更改 barbican 的 keystone 端点。默认情况下,barbican 将尝试连接到 keystone 的地址为 https://:5000/v3,但如果 keystone 位于另一台主机上,则应更改此地址。

在 glance-api.conf 中找到以下行

[barbican]
auth_endpoint = http://localhost:5000/v3

然后将 https://:5000/v3 替换为 keystone 的 URL,并在末尾添加 /v3。例如,‘https://192.168.245.9:5000/v3’。

etc/glance-api.conf 中可以配置的另一个选项是使用哪个密钥管理器。默认情况下,Glance 将使用 Castellan 密钥管理器接口定义的默认密钥管理器,当前为 Barbican 密钥管理器。

在 glance-api.conf 中找到以下行

[key_manager]
backend = barbican

然后将该值替换为所需的密钥管理器类。

注意

如果这些行不存在,只需将它们添加到文件末尾即可。

使用签名验证

启用签名验证需要图像具有一些属性,这些属性是

img_signature
img_signature_hash_method
img_signature_key_type
img_signature_certificate_uuid

属性 img_signature

这是您的图像的签名。

注意

最大字符限制为 255。

属性 img_signature_hash_method

哈希方法是您使用的哈希方法。

当前可用的方法有:

  • SHA-224

  • SHA-256

  • SHA-384

  • SHA-512

属性 img_signature_key_type

这是您可以用于图像的 key_types。

当前可用的方法有:

  • RSA-PSS

  • DSA

  • ECC-CURVES

  • SECT571K1

  • SECT409K1

  • SECT571R1

  • SECT409R1

  • SECP521R1

  • SECP384R1

注意

ECC 曲线 - 仅包含大于 384 的密钥大小。并非所有 ECC 曲线都可能受后端支持。

属性 img_signature_certificate_uuid

这是您上传到 Barbican 的证书的 UUID。

因此,传递给 glance 的类型是

  • UUID

注意

支持的证书类型是

  • X_509

示例用法

请按照以下说明创建您的密钥

$ openssl genrsa -out private_key.pem 1024
Generating RSA private key, 1024 bit long modulus
...............................................++++++
..++++++
e is 65537 (0x10001)

$ openssl rsa -pubout -in private_key.pem -out public_key.pem
writing RSA key

$ openssl req -new -key private_key.pem -out cert_request.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.

$ openssl x509 -req -days 14 -in cert_request.csr -signkey private_key.pem -out new_cert.crt
Signature ok
subject=/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd
Getting Private key

上传您的证书。这只需要完成一次,因为您可以使用相同的 Secret href 用于许多图像,直到它过期为止。

$ openstack secret store --name test --algorithm RSA --expiration 2016-06-29 --secret-type certificate --payload-content-type "application/octet-stream" --payload-content-encoding base64 --payload "$(base64 new_cert.crt)"
+---------------+-----------------------------------------------------------------------+
| Field         | Value                                                                 |
+---------------+-----------------------------------------------------------------------+
| Secret href   | http://127.0.0.1:9311/v1/secrets/cd7cc675-e573-419c-8fff-33a72734a243 |

$ cert_uuid=cd7cc675-e573-419c-8fff-33a72734a243

获取图像并创建签名

$ echo This is a dodgy image > myimage

$ openssl dgst -sha256 -sign private_key.pem -sigopt rsa_padding_mode:pss -out myimage.signature myimage

$ base64 -w 0 myimage.signature > myimage.signature.b64

$ image_signature=$(cat myimage.signature.b64)

注意

使用 Glance v1 需要 ‘-w 0’,因为它不支持多行图像属性。Glance v2 支持多行图像属性,不需要 ‘-w 0’,但仍然可以使用。

创建图像

$ glance image-create --name mySignedImage --container-format bare --disk-format qcow2 --property img_signature="$image_signature" --property img_signature_certificate_uuid="$cert_uuid" --property img_signature_hash_method='SHA-256' --property img_signature_key_type='RSA-PSS' < myimage

注意

如果验证不成功,创建图像可能会失败。这将导致删除该图像。