Добавление сертификата хранилища ключей Azure в пакетную учетную запись Azure через .NET libs - PullRequest
0 голосов
/ 07 сентября 2018

Мне нужно автоматизировать создание учетной записи Azure Batch. Частично это добавление сертификата к учетной записи из существующего хранилища ключей Azure. Я думаю, что у меня есть все части, которые мне нужны, но я просто не могу собрать их все вместе; У меня есть KeyVault.Models.CertificateBundle объект и Management.Batch.Models.BatchAccount объект, но я не уверен, как получить одно в другое.

Мой код выглядит так:

// Create Batch account
var storageAccount = new Models.AutoStorageBaseProperties(storageAccountId);
mgmtClient.BatchAccount.Create(resourceGroupName, accountName,
    new Models.BatchAccountCreateParameters()
    {
        Location = clusterZone,
        AutoStorage = storageAccount
    });

string certName;
Models.CertificateCreateOrUpdateParameters certParams;

// Add certificate
using (KeyVaultClient kvClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(GetKeyVaultToken)))
{
    var cert = kvClient.GetCertificateAsync(certId).GetAwaiter().GetResult();
    string thumbprint = Convert.ToBase64String(cert.X509Thumbprint);
    string cer = Convert.ToBase64String(cert.Cer);
    certParams = new Models.CertificateCreateOrUpdateParameters(Convert.ToBase64String(cert.Cer), cert.Id, thumbprint: thumbprint, format: Models.CertificateFormat.Cer, type: cert.ContentType);
    certName = $"SHA1-{thumbprint}"; // not sure about this one
}

// failing with a complaint about the cert name
mgmtClient.Certificate.Create(resourceGroupName, accountName, certName, certParams);

Точная ошибка, которую я получаю с этим кодом:

'certificateName' does not match expected pattern '^[\\w]+-[\\w]+$'.

certName выглядит как SHA1-XXXXXXXXXXXXXXXXXXXXXX+XXXX=. На отпечатке есть несколько буквенно-цифровых символов. Я просто догадываюсь, что это SHA1, но в остальном имя мне подходит. Я не уверен, что мне не хватает.

Я бы также с радостью принял чье-то более простое решение этой конкретной проблемы.

1 Ответ

0 голосов
/ 11 сентября 2018

'CertificateName' не соответствует ожидаемому шаблону '^ [\ w] + - [\ w] + $'.

Вы можете отладить код и проверить отпечаток в Azure keyvault. В вашем коде отпечаток, полученный из кода, не совпадает с отпечатком сертификата. Я получил отпечаток сертификата со следующим кодом.

X509Certificate2 x509 = new X509Certificate2();
x509.Import(cert.Cer);
var thumbprint = x509.Thumbprint;

Следующий демонстрационный код, который я использовал для добавления сертификата в пакетную учетную запись Azure.

var credentials = SdkContext.AzureCredentialsFactory.FromFile(@"cred file path");
var resourceGroup = "resourceGroup";
var accountName = "batchAccountName";
var subscriptionId = "subscriptionName";
var certificateIdentifier = "https://keyvaultName.vault.azure.net/certificates/certName/xxxxx";
var batchManagementClient = new BatchManagementClient(credentials)
        {
            SubscriptionId = subscriptionId
        };
var azureServiceTokenProvider = new AzureServiceTokenProvider();

var keyVaultClient =
            new KeyVaultClient(
                new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
var cert = keyVaultClient.GetCertificateAsync(certificateIdentifier).Result;
X509Certificate2 x509 = new X509Certificate2();
x509.Import(cert.Cer);
var thumbprint = x509.Thumbprint;
var certConent = Convert.ToBase64String(cert.Cer);
var certName = $"SHA1-{thumbprint}";
var result= batchManagementClient.Certificate.CreateAsync(resourceGroup, accountName, certName, new CertificateCreateOrUpdateParametersInner
        {
            Thumbprint = thumbprint,
            Data = certConent,
            ThumbprintAlgorithm = "SHA1",
            Format = CertificateFormat.Cer,

        }).Result;

Результат теста:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...