使用Google KMS存储的密钥生成CSR遇OpenSSL pkcs11引擎错误求助
解决Google KMS密钥生成CSR时OpenSSL找不到PKCS11引擎的问题
错误根源
Google Cloud Shell默认环境未预装OpenSSL的PKCS11引擎,也未配置Google KMS专用的PKCS11代理,导致无法通过OpenSSL调用KMS中的密钥。
解决步骤
1. 安装PKCS11相关依赖
在Cloud Shell中执行以下命令,安装OpenSSL PKCS11引擎及基础支持包:
sudo apt-get update && sudo apt-get install -y opensc libengine-pkcs11-openssl
2. 下载并配置Google KMS PKCS11代理
Google提供官方PKCS11代理用于连接KMS,执行以下命令完成安装:
wget https://github.com/GoogleCloudPlatform/kms-pkcs11/releases/latest/download/cloudkms-pkcs11-linux-amd64 chmod +x cloudkms-pkcs11-linux-amd64 sudo mv cloudkms-pkcs11-linux-amd64 /usr/local/bin/cloudkms-pkcs11
接下来配置OpenSSL识别PKCS11引擎:
- 编辑
/etc/ssl/openssl.cnf文件,添加以下配置(根据OpenSSL版本调整路径):
[engine_section] pkcs11 = pkcs11_section [pkcs11_section] engine_id = pkcs11 # OpenSSL 3.x路径 dynamic_path = /usr/lib/x86_64-linux-gnu/engines-3/pkcs11.so # OpenSSL 1.1.x路径(若3.x路径不存在则替换) # dynamic_path = /usr/lib/x86_64-linux-gnu/engines/pkcs11.so MODULE_PATH = /usr/local/bin/cloudkms-pkcs11 init = 0
3. 配置环境变量并验证引擎
设置KMS的项目ID和密钥所在区域(替换为你的实际信息):
export CLOUDKMS_PKCS11_PROJECT="你的项目ID" export CLOUDKMS_PKCS11_LOCATION="你的密钥区域"
验证PKCS11引擎是否加载成功:
openssl engine -t pkcs11
输出显示pkcs11 engine available即表示配置生效。
4. 生成CSR的正确命令
替换占位符后执行以下命令生成CSR,输出文件为csr.pem:
openssl req -new -subj '/emailAddress={yourEmail}/CN={companyName}/O={companyName}/' -sha256 -engine pkcs11 -keyform engine -key "pkcs11:object={keyName};type=private" -out csr.pem
注意事项
Cloud Shell为临时环境,每次重启后需重新执行上述安装配置步骤;若需长期使用,建议创建自定义虚拟机镜像或使用持久化实例。
内容的提问来源于stack exchange,提问作者Muhammad Faisal
相关产品推荐
相关产品推荐

