Azure Key Vault - CertificateClient - import_certificate: (BadParameter) Политика свойства имеет недопустимое значение - PullRequest
0 голосов
/ 07 мая 2020

Я пытался загрузить несколько сертификатов letsencrypt в Azure AKS, но у меня возникли проблемы ....

Документация здесь : предлагает все, что мне нужно предоставить, это имя_ сертификата и certificate_bytes .. Когда я пробую это, я получаю:

In [176]: x = c.import_certificate('le-test-cert', bcert)     
AttributeError: 'NoneType' object has no attribute '_to_certificate_policy_bundle'

При попытке с политикой сертификатов я пробовал оба:

In [180]: p = CertificatePolicy('Unknown', subject='CN=devtest.<removed>.com')                                                              
In [181]: x = c.import_certificate('le-test-cert', bcert, policy=p) 
HttpResponseError: (BadParameter) Property policy has invalid value

и

In [183]: p = CertificatePolicy.get_default()                                                                                               
In [184]: x = c.import_certificate('le-test-cert', bcert, policy=p)        
HttpResponseError: (BadParameter) Property policy has invalid value

Наконец Я попытался загрузить сертификат через портал, вытащить его обратно с помощью sdk и получить сгенерированную политику. Используя эту политику, я смог снова загрузить сертификат ....

In [186]: x = c.get_certificate('manual-test') 
In [187]: x = c.import_certificate('2le-test-cert', bcert, policy=x.policy)                                                       
Readonly attribute created will be ignored in class <class 'azure.keyvault.certificates._shared._generated.v7_0.models._models_py3.CertificateAttributes'>
Readonly attribute updated will be ignored in class <class 'azure.keyvault.certificates._shared._generated.v7_0.models._models_py3.CertificateAttributes'>

Однако при попытке использовать эту политику для генерации fre sh сертификата я продолжал получать тот же «BadParameter». .. У кого-нибудь есть рабочий пример, как это сделать? или есть идеи, где я ошибаюсь?

Спасибо

1 Ответ

0 голосов
/ 11 мая 2020

Согласно моему тесту, когда мы импортируем сертификаты в хранилище ключей Azure, нам нужно сообщить хранилищу ключей тип сертификата (pfx или pem). Поэтому нам нужно указать content_type в CertificatePolicy.

Например

import os
import OpenSSL.crypto
from azure.identity import ClientSecretCredential
from azure.keyvault.certificates import CertificateClient

#get pfx file content
pfx =open('E:\\mycert.pfx', 'rb').read()
#get the Common Name field of subject
pfxPassword=b'Password0123!'
p12=OpenSSL.crypto.load_pkcs12(pfx,pfxPassword)
cert=p12.get_certificate()
subject = cert.get_subject()
issued_to = subject.CN    

client =CertificateClient('https://testsql08.vault.azure.net/',token_credential )
cert_policy = CertificatePolicy(
            issuer_name="Unknown",
            subject="CN="+issued_to,
            content_type="application/x-pkcs12"
        )
result=client.import_certificate(
            certificate_name='test14578', certificate_bytes=pfx, policy=cert_policy, password=pfxPassword.decode('utf-8') 
        )
print(result.id)

enter image description here

...