Azure 密钥保管库:合并证书
Azure key vault: Merge certificate
我正在尝试了解 Azure Key vault 的合并 API。它的用例是什么?
https://docs.microsoft.com/en-us/rest/api/keyvault/mergecertificate/mergecertificate
文档说
The MergeCertificate operation performs the merging of a certificate or certificate chain with a key pair currently available in the service.
我在这里理解的一个用例是在密钥保管库中创建 CSR,由您的 CA 对其进行签名,然后将其合并到密钥保管库中的 CSR 以完成证书创建。
但是合并证书链是什么意思?这是否意味着用于签署 CSR 的证书链?
是的,合并链意味着整个链,从为 CSR 生成的证书开始。
所以,要使用 OpenSSL 1.1.1 进行本地测试
- 生成 CA
openssl req -new -newkey rsa:2048 -nodes -out ca.csr -keyout ca.key -extensions v3_ca
openssl x509 -signkey ca.key -days 365 -req -in ca.csr -set_serial 01 -out ca.crt
- 生成中间 CA
openssl req -new -newkey rsa:2048 -nodes -out inter.csr -keyout inter.key -addext basicConstraints=CA:TRUE
openssl x509 -CA ca.crt -CAkey ca.key -days 365 -req -in inter.csr -set_serial 02 -out inter.crt
使用 Azure KeyVault 生成请求并将 CSR 下载到 test.csr 文件。假设使用 keyvault test-kv 和名称为 test.
的证书
使用中间 CA 签署请求
openssl x509 -CA inter.crt -CAkey inter.key -days 365 -req -in test.csr -set_serial 03 -out test.crt
- 将证书与中间和 CA 捆绑到 PEM 格式(只需按正确顺序连接这些文本文件)
cat test.crt inter.crt ca.crt > test-chain.pem
- 合并 Azure KeyVault 中的证书链
az keyvault certificate pending merge --vault-name test-kv --name test --file test-chain.pem
关于格式的补充说明:
在 Azure KeyVault 中创建时,证书内容类型可以设置为 PKCS12 或 PEM。结果合并证书是 exported/downloaded
- 对使用 PKCS12 内容类型创建的证书使用 PFX 格式
- 为使用 PEM 内容类型创建的证书使用 PEM 格式
但是,用于合并的链束的格式不取决于该内容类型。它仅取决于用于执行合并的方法:
- az cli 支持 PEM 格式(带有单个证书或整个链)和 crt(只包含一个证书,没有链),
- Azure 门户 UI 允许上传 PEM、P7B 和 crt。但只有合并 P7B 才能保留链。在合并 PEM 的情况下,仅使用 PEM 捆绑包中指定的第一个证书(忽略其他证书)
- Azure KeyVault REST api 使用一组 base64 编码的证书来表示链 (https://docs.microsoft.com/en-us/azure/key-vault/certificates/create-certificate-scenarios#merge-when-a-pending-request-is-created---manual-certificate-creation)
以下命令可用于创建包含链的 P7B 文件:
openssl crl2pkcs7 -nocrl -certfile test.crt -out test.p7b -certfile inter.crt -certfile ca.crt
当与链合并的证书被下载到 PEM 中时,它已经包含了整个链。
在 PFX 中下载证书时,要提取单个证书,可以使用以下命令转换为 PEM,仅包含证书(省略私钥):
openssl pkcs12 -in downloaded-cert.pfx -nokeys -nodes -out chain.pem
然后chain.pem可以用文本编辑器打开,提取单个证书到单独的crt文件
我正在尝试了解 Azure Key vault 的合并 API。它的用例是什么? https://docs.microsoft.com/en-us/rest/api/keyvault/mergecertificate/mergecertificate
文档说
The MergeCertificate operation performs the merging of a certificate or certificate chain with a key pair currently available in the service.
我在这里理解的一个用例是在密钥保管库中创建 CSR,由您的 CA 对其进行签名,然后将其合并到密钥保管库中的 CSR 以完成证书创建。
但是合并证书链是什么意思?这是否意味着用于签署 CSR 的证书链?
是的,合并链意味着整个链,从为 CSR 生成的证书开始。
所以,要使用 OpenSSL 1.1.1 进行本地测试
- 生成 CA
openssl req -new -newkey rsa:2048 -nodes -out ca.csr -keyout ca.key -extensions v3_ca
openssl x509 -signkey ca.key -days 365 -req -in ca.csr -set_serial 01 -out ca.crt
- 生成中间 CA
openssl req -new -newkey rsa:2048 -nodes -out inter.csr -keyout inter.key -addext basicConstraints=CA:TRUE
openssl x509 -CA ca.crt -CAkey ca.key -days 365 -req -in inter.csr -set_serial 02 -out inter.crt
使用 Azure KeyVault 生成请求并将 CSR 下载到 test.csr 文件。假设使用 keyvault test-kv 和名称为 test.
的证书使用中间 CA 签署请求
openssl x509 -CA inter.crt -CAkey inter.key -days 365 -req -in test.csr -set_serial 03 -out test.crt
- 将证书与中间和 CA 捆绑到 PEM 格式(只需按正确顺序连接这些文本文件)
cat test.crt inter.crt ca.crt > test-chain.pem
- 合并 Azure KeyVault 中的证书链
az keyvault certificate pending merge --vault-name test-kv --name test --file test-chain.pem
关于格式的补充说明:
在 Azure KeyVault 中创建时,证书内容类型可以设置为 PKCS12 或 PEM。结果合并证书是 exported/downloaded
- 对使用 PKCS12 内容类型创建的证书使用 PFX 格式
- 为使用 PEM 内容类型创建的证书使用 PEM 格式
但是,用于合并的链束的格式不取决于该内容类型。它仅取决于用于执行合并的方法:
- az cli 支持 PEM 格式(带有单个证书或整个链)和 crt(只包含一个证书,没有链),
- Azure 门户 UI 允许上传 PEM、P7B 和 crt。但只有合并 P7B 才能保留链。在合并 PEM 的情况下,仅使用 PEM 捆绑包中指定的第一个证书(忽略其他证书)
- Azure KeyVault REST api 使用一组 base64 编码的证书来表示链 (https://docs.microsoft.com/en-us/azure/key-vault/certificates/create-certificate-scenarios#merge-when-a-pending-request-is-created---manual-certificate-creation)
以下命令可用于创建包含链的 P7B 文件:
openssl crl2pkcs7 -nocrl -certfile test.crt -out test.p7b -certfile inter.crt -certfile ca.crt
当与链合并的证书被下载到 PEM 中时,它已经包含了整个链。 在 PFX 中下载证书时,要提取单个证书,可以使用以下命令转换为 PEM,仅包含证书(省略私钥):
openssl pkcs12 -in downloaded-cert.pfx -nokeys -nodes -out chain.pem
然后chain.pem可以用文本编辑器打开,提取单个证书到单独的crt文件