将私钥和证书与Azure密钥库证书分开

时间:2020-04-27 13:10:56

标签: python ssl grpc azure-keyvault grpc-python

使用Azure Key Vault Secret client library for Python,我获得了包含已提取私钥的证书的秘密。

-----BEGIN PRIVATE KEY

{private_key_value}

-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----

{certificate_value}

-----END CERTIFICATE-----

在这种情况下,是否已经有用于分别获取两个值(证书和私钥)的软件包,或者如何从字符串中提取它们?我需要为此添加一个ssl_server_credenetials给我的gRPC服务器,该服务器具有- [PEM编码的私钥,PEM编码的证书链]形式的对列表 {{3} }

1 个答案:

答案 0 :(得分:0)

如果您的证书的内容类型是 PEM 并且您获得带有证书名称的密钥的 .value,则您应该获得与您描述的一样的 PEM 编码字符串。现在有一个 azure-keyvault-certificatessample,它显示了如何使用 pyOpenSSL 从证书中获取私钥,但是如果您想解析字符串,您可以执行以下操作:

from azure.identity import DefaultAzureCredential
from azure.keyvault.secrets import SecretClient

credential = DefaultAzureCredential()
client = SecretClient("https://{vault-name}.vault.azure.net", credential)
secret = client.get_secret("cert-name")

def get_section_from_pem(pem_string, section):
    header = "-----BEGIN {}-----".format(section)
    footer = "-----END {}-----".format(section)
    header_start = pem_string.index(header)
    footer_start = pem_string.index(footer)
    content = pem_string[header_start + len(header) : footer_start]
    return content

private_key = get_section_from_pem(secret.value, "PRIVATE KEY")
certificate = get_section_from_pem(secret.value, "CERTIFICATE")

print("Private key: {}\nCertificate: {}".format(private_key, certificate))

(我使用 Python 开发 Azure SDK)