图像签名验证¶
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
注意
如果验证不成功,创建图像可能会失败。这将导致删除该图像。