Как получить закрытый ключ из сертификата в хранилище ключей Azure? - PullRequest
1 голос
/ 10 октября 2019

У меня есть сертификат в хранилище ключей Azure, из которого я хотел бы извлечь закрытый ключ.

Согласно документам Microsoft: Когда создается сертификат хранилища ключей, адресуемый ключ иСекрет также создаются с тем же именем. Ключ хранилища ключей позволяет выполнять операции с ключами, а секрет хранилища ключей позволяет получить значение сертификата в качестве секрета.

Однако мне не удалось извлечь из этого секретный ключ. Вот пример кода Python, который я пробовал:

pem_data  = get_secret('https://keyvault.azure.net/', 'x509-cert')
pem_data = '-----BEGIN CERTIFICATE----- ' + pem_data + ' -----END CERTIFICATE-----'
pem_data = pem_data.encode()
key = x509.load_pem_x509_certificate(pem_data,  backend=default_backend())
private_key = key.private_key()

Это, однако, приведет к ошибке, сказав, что он не может загрузить сертификат.

1 Ответ

1 голос
/ 10 октября 2019

Данные pem_data, которые вы получаете из хранилища ключей, уже имеют формат pem, и вы можете получить только открытый ключ.

pem_data = client.get_secret("https://XX.vault.azure.net/", "XX", "XX")
pem_data = pem_data.value.encode()

cert = load_pem_x509_certificate(pem_data,  backend=default_backend())
public_key = cert.public_key()

Если вы хотите получить закрытый ключ, вы можете использовать OpenSSL:

import OpenSSL.crypto

pem_data = client.get_secret("https://XX.vault.azure.net/", "XX", "XX")
pem_data = pem_data.value.encode()
crtObj = crypto.load_certificate(crypto.FILETYPE_PEM, pem_data)
pubKeyObject = crtObj.get_pubkey()
priKeyString = crypto.dump_privatekey(crypto.FILETYPE_PEM, pubKeyObject)
print(priKeyString)

Примечание:

Убедитесь, что вы указали, что ключ экспортируется при создании сертификата. Если политика указывает на невозможность экспорта, то закрытый ключ не является частью значения при извлечении в качестве секрета. Подробнее см. в этом документе .

enter image description here

...