我正在尝试通过门户 UI 从 Azure Key Vault 获取证书的原始 .pfx 文件,包括其私钥。
我正在使用 UI 导入证书,如此处 (Azure) 门户选项所述: https://learn.microsoft.com/en-us/azure/key-vault/certificates/tutorial-import-certificate?tabs=azure-portal
我正在下载此处 (Azure) 门户选项记录的 pfx 文件: https://learn.microsoft.com/en-us/azure/key-vault/certificates/how-to-export-certificate?tabs=azure-portal
当我尝试从此 pfx 文件获取 ca-key 和 ca-crt 时,由于密码错误而失败。我现在已经重复了 5 次了,以满足我的偏执——密码是正确的。所以我检查了原始文件和我下载的文件:
(base) certs % shasum -a 256 ca-crt.pfx
50739f7a73fb092ae6ef9bf3372a16c28a4587b41c0bf12262dbf15e74169d07 ca-crt.pfx
(base) certs % shasum -a 256 vault1-test1ca-20240212.pfx
314e9b0d5681bfcc470490f1138e2ad09861ac7060fab6ca6e2a6edb28d19c6d vault1-test1ca-20240212.pfx
有人可以解释为什么我无法从 Azure Key Vault 获取原始文件吗?也许还有如何获得它的解决方案?
编辑:
我刚刚通过 Azure CLI 下载它,当我尝试解密它时,要求我提供解密密码,该密码不是我在创建 .pfx 文件时设置的密码:
(base) certs % openssl des3 -d -in cault1-test1ca-20240212.pfx -out ca.pfx
enter DES-EDE3-CBC decryption password:
az keyvault certificate download
永远不会获得私钥。这是设计使然,因为目的是在密钥算法允许的情况下,对托管密钥使用密钥操作来解密 (RSA)、签名(RSA 或 ECDsa)或解包 (RSA)。
此外,如果您导入了私钥受密码保护的证书,则必须提供该密码,以便私钥可以解密并存储在 Key Vault 中。密码已经没有了,但是您仍然可以在下载后重新加密私钥。
如果您想检索原始 PFX - 假设这是您最初导入或创建的内容,因为 Key Vault 不会在 PFX (PKCS12) 或 PEM(PKCS1 或 PKCS8)之间进行转换 - 您需要下载托管密钥 和 使用的策略创建密钥时或导入密钥时使用的默认策略必须允许导出私钥,这是默认策略,例如,
az keyvault certificate get-default-policy --query keyProperties.exportable
按照惯例,托管机密与证书同名;不过,最好先获取证书信息,然后获取用于生产用途的
sid
(秘密 ID):
sid=$(az keyvault certificate show --vault-name heathskv --name test-cert -o tsv --query sid)
az keyvault secret show --id $sid -o tsv --query value | base64 -d > test-cert.pfx
test-cert.pfx
密钥对与私钥未加密,因为它在导入 Key Vault 时被解密。