2017-02-13 10 views
0

В приведенном ниже скрипте будет создан самозаверяющий сертификат, создайте защищенный паролем pfx и добавьте сертификат в хранилище ключей. Когда я запускаю шаблон ARM после скрипта, он не работает с ошибкой ниже. Однако, когда я вручную загружаю pfx в пользовательский интерфейс (Azure portal) и вводя правильный пароль, шаблон ARM будет успешно развернут. Любые идеи, как заставить это работать?Сертификат Azure в Key Vault не действителен для службы приложений

код PowerShell (при загрузке сгенерированного PFX на портале, никакая ошибка не генерируется):

# Generate the certificate in the local store 
$cert = New-SelfSignedCertificate -CertStoreLocation "cert:\CurrentUser\My" -Subject "CN=$certificateName" -KeyExportPolicy Exportable 

# Get the raw value of the certificate 
$keyValue = [System.Convert]::ToBase64String($cert.GetRawCertData()) 

Export-PfxCertificate -Cert $cert -Password $certPasswordSecure -FilePath "d:/temp/SelfSigned.pfx" 

$secret = ConvertTo-SecureString -String $keyValue -AsPlainText –Force 
$secretContentType = 'application/x-pkcs12' 

Set-AzureKeyVaultSecret -VaultName $keyVaultName -Name $keyVaultSecretNameCertificate -SecretValue $keyValue -ContentType $secretContentType 

Ошибка:

New-AzureRmResourceGroupDeployment : 21:22:36 - Resource Microsoft.Web/certificates 'testCertificate' failed with message '{ 
    "Code": "BadRequest", 
    "Message": "The parameter KeyVault Certificate has an invalid value.", 
    "Target": null, 
    "Details": [ 
    { 
     "Message": "The parameter KeyVault Certificate has an invalid value." 
    }, 
    { 
     "Code": "BadRequest" 
    }, 
    { 
     "ErrorEntity": { 
     "Code": "BadRequest", 
     "Message": "The parameter KeyVault Certificate has an invalid value.", 
     "ExtendedCode": "51008", 
     "MessageTemplate": "The parameter {0} has an invalid value.", 
     "Parameters": [ 
      "KeyVault Certificate" 
     ], 
     "InnerErrors": null 
     } 
    } 
    ], 
    "Innererror": null 
}' 
At line:3 char:1 
+ New-AzureRmResourceGroupDeployment -Name TestKeyVaultDeploy -Resource ... 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : NotSpecified: (:) [New-AzureRmResourceGroupDeployment], Exception 
    + FullyQualifiedErrorId : Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.NewAzureResourceGroupDeploymentCmdlet 

New-AzureRmResourceGroupDeployment : 21:23:11 - Template output evaluation skipped: at least one resource deployment operation failed. Please list deployment operations 
for details. Please see https://aka.ms/arm-debug for usage details. 
At line:3 char:1 
+ New-AzureRmResourceGroupDeployment -Name TestKeyVaultDeploy -Resource ... 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : NotSpecified: (:) [New-AzureRmResourceGroupDeployment], Exception 
    + FullyQualifiedErrorId : Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.NewAzureResourceGroupDeploymentCmdlet 

New-AzureRmResourceGroupDeployment : 21:23:11 - Template output evaluation skipped: at least one resource deployment operation failed. Please list deployment operations 
for details. Please see https://aka.ms/arm-debug for usage details. 
At line:3 char:1 
+ New-AzureRmResourceGroupDeployment -Name TestKeyVaultDeploy -Resource ... 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : NotSpecified: (:) [New-AzureRmResourceGroupDeployment], Exception 
    + FullyQualifiedErrorId : Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.NewAzureResourceGroupDeploymentCmdlet 

ARM ресурсов сертификата:

{ 
      "type": "Microsoft.Web/certificates", 
      "name": "testCertificate", 
      "apiVersion": "2016-03-01", 
      "location": "[resourceGroup().location]", 
      "properties": { 
       "keyVaultId": "[parameters('masterKeyVaultId')]", 
       "keyVaultSecretName": "[parameters('servicePrincipalCertSecretName')]", 
       "serverFarmId": "[resourceId('Microsoft.Web/serverfarms/', variables('appServicePlanName'))]" 
      } 
     }, 

ответ

0

Может быть, вам не хватает политики сертификата при загрузке? Но действительно, если вы создаете новые сертификаты, то зачем беспокоиться о создании сертификата локально, просто сгенерируйте его в самом хранилище ключей.

$credential = Get-Credential 

login-azurermaccount -Credential $credential 
$vaultName = 'my-vault-full-of-keys' 
$certificateName = 'my-new-cert' 
$policy = New-AzureKeyVaultCertificatePolicy -SubjectName "CN=mememe.me" -IssuerName Self -ValidityInMonths 120 
Add-AzureKeyVaultCertificate -VaultName $vaultName -Name $certificateName -CertificatePolicy $policy 
Смежные вопросы