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 或更高版本来创建签名的镜像。
流程
使用
openssl命令创建密钥和证书:创建私钥:
openssl genrsa -out private_key.pem 1024
$ openssl genrsa -out private_key.pem 1024Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建公钥:
openssl rsa -pubout -in private_key.pem -out public_key.pem
$ openssl rsa -pubout -in private_key.pem -out public_key.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建证书:
openssl req -new -key private_key.pem -out cert_request.csr
$ openssl req -new -key private_key.pem -out cert_request.csrCopy to Clipboard Copied! Toggle word wrap Toggle overflow 提示时,请输入要包含在您的证书请求中的详情:
openssl x509 -req -days 14 -in cert_request.csr -signkey private_key.pem -out new_cert.crt
$ openssl x509 -req -days 14 -in cert_request.csr -signkey private_key.pem -out new_cert.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow
将证书上传到 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)"
$ 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 Copied! Toggle word wrap Toggle overflow 输出示例:
+---------------+-----------------------------------------------------------------------+ | Field | Value | +---------------+-----------------------------------------------------------------------+ | Secret href | http://127.0.0.1:9311/v1/secrets/cd7cc675-e573-419c-8fff-33a72734a243 | +---------------+-----------------------------------------------------------------------+
+---------------+-----------------------------------------------------------------------+ | Field | Value | +---------------+-----------------------------------------------------------------------+ | Secret href | http://127.0.0.1:9311/v1/secrets/cd7cc675-e573-419c-8fff-33a72734a243 | +---------------+-----------------------------------------------------------------------+Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意记录证书 UUID,以便在稍后的步骤中使用。在本例中,UUID 是
cd7cc675-e573-419c-8fff-33a72734a243。检索镜像并创建签名:
检索镜像:
echo <This is my image> > <myimage>
$ echo <This is my image> > <myimage>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
private_key.pem为镜像签名并生成.signature文件。例如:openssl dgst -sha512 -sign private_key.pem -sigopt rsa_padding_mode:pss -out myimage.signature myimage
$ openssl dgst -sha512 -sign private_key.pem -sigopt rsa_padding_mode:pss -out myimage.signature myimageCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
.signature文件转换为 Base64 格式:base64 -w 0 myimage.signature > myimage.signature.b64
$ base64 -w 0 myimage.signature > myimage.signature.b64Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 Base64 值加载到上传镜像时使用的变量中:
image_signature=$(cat myimage.signature.b64)
$ image_signature=$(cat myimage.signature.b64)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
将具有有效签名属性的镜像上传到镜像服务:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow