Azure загружает старый сертификат, в то время как сертификат службы приложения был обновлен и выпущен - PullRequest
0 голосов
/ 30 сентября 2019

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

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

  • Сначала у меня была проблема с разрешением, но теперь я могу без проблем загрузить файл .pfx, используя ссылку, предоставленную Microsoft
  • Для сертификата установлено автоматическое обновление в Azure (и Azure сообщает, что он действителен до 20 октября 2009 года; это правильно, и он только что был обновлен и выдан)
  • После загрузки, однако ... Я заметилдата в сертификате все еще установлена ​​на октябрь 19 года.
  • Пока что я не знаю, почему этот метод сработал в прошлом году ... Я просто хочу скачать новый .pfx и загрузить его на свой шлюз приложений.

Я пытался загрузить его через Powershell, Azure CLI, Old Azure CLI. но увы ...

** Редактировать: ** Я не мог заставить его работать и создал совершенно новый сертификат для того же домена подстановки. И - удивительно, удивительно - теперь Azure действительно создал новые секреты в хранилище ключей для использования с этим сертификатом. Вопрос остается ... Почему он этого не делает, когда существующий сертификат автоматически обновляется ???

Возможно, опять что-то простое, но я не вижу этого. Кто-нибудь из вас знает, как решить эту проблему?

Спасибо!

Добавлены некоторые доказательства:

Снимок экрана: данные сертификата

Снимок экрана: ключ хранилища, секретная дата

Скрипт для записи:

# Script for exporting pfx certificate from the Azure Cloud
#
# Type the following commands in PowerShell console to execute the script:
#   > Powershell –ExecutionPolicy Bypass
#   > .\copyasc.ps1
#

param (
    [string]$appServiceCertificateName = "Cert_name",
    [string]$azureLoginEmailId = "username@contoso.com"
)

$resourceGroupName = "RG_name"
$subscriptionId = "sub_id"
$exportFileName = "$appServiceCertificateName.pfx"

Login-AzureRmAccount
Set-AzureRmContext -SubscriptionId $subscriptionId

$ascResource = Get-AzureRmResource -ResourceName $appServiceCertificateName -ResourceGroupName $resourceGroupName -ResourceType "Microsoft.CertificateRegistration/certificateOrders" -ApiVersion "2015-08-01"
$keyVaultId = ""
$keyVaultSecretName = ""

$certificateProperties=Get-Member -InputObject $ascResource.Properties.certificates[0] -MemberType NoteProperty
$certificateName = $certificateProperties[0].Name
$keyVaultId = $ascResource.Properties.certificates[0].$certificateName.KeyVaultId
$keyVaultSecretName = $ascResource.Properties.certificates[0].$certificateName.KeyVaultSecretName

$keyVaultIdParts = $keyVaultId.Split("/")
$keyVaultName = $keyVaultIdParts[$keyVaultIdParts.Length - 1]
$keyVaultResourceGroupName = $keyVaultIdParts[$keyVaultIdParts.Length - 5]
Set-AzureRmKeyVaultAccessPolicy -ResourceGroupName $keyVaultResourceGroupName -VaultName $keyVaultName -UserPrincipalName $azureLoginEmailId -PermissionsToSecrets get
$secret = Get-AzureKeyVaultSecret -VaultName $keyVaultName -Name $keyVaultSecretName
$pfxCertObject=New-Object System.Security.Cryptography.X509Certificates.X509Certificate2 -ArgumentList @([Convert]::FromBase64String($secret.SecretValueText),"", [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable)
$pfxPassword = -join ((65..90) + (97..122) + (48..57) | Get-Random -Count 50 | % {[char]$_})
$currentDirectory = (Get-Location -PSProvider FileSystem).ProviderPath
[Environment]::CurrentDirectory = (Get-Location -PSProvider FileSystem).ProviderPath
New-Item $currentDirectory\$exportFileName -ItemType file
[io.file]::WriteAllBytes(".\$exportFileName", $pfxCertObject.Export([System.Security.Cryptography.X509Certificates.X509ContentType]::Pkcs12, $pfxPassword))
Write-Host "Created an App Service Certificate copy at: $currentDirectory\$exportFileName"
Write-Warning "For security reasons, do not store the PFX password. Use it directly from the console as required."
Write-Host "PFX password: $pfxPassword"

Ответы [ 2 ]

0 голосов
/ 04 октября 2019

Хорошо ... после некоторых экспериментов я наконец нашел решение. Похоже, что у самой Azure не было достаточных разрешений, и я решил это следующим образом:

  1. Создайте новый сертификат службы приложений и настройте его.
  2. После настройки Azure появитсявнесли несколько изменений в «Политики доступа» в хранилище ключей Azure, добавив два приложения, которых раньше не было. Эти приложения имеют несколько «Секретных разрешений» На скриншоте указаны имена приложений
  3. Когда я пошел проверить другие сертификаты, они также были обновлены, и я мог снова загрузить .pfx справильный секрет (используя сценарий в моем оригинальном вопросе). (Имейте в виду, что вам также необходимо предоставить собственные разрешения учетной записи для «получения» файла .pfx в политиках доступа.)

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

0 голосов
/ 03 октября 2019

Исходя из моего теста, было бы несколько версий секрета, если он был продлен.

enter image description here

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

  2. В PowerShell вы можете проверить правильность версии следующим образом:

$secret = Get-AzureKeyVaultSecret -VaultName $keyVaultName -Name $keyVaultSecretName
$secret.Version
$secret.Expires

Если оба вышеприведенных значения верны, тоЭкспортируемый pfx тоже должен быть правильным. Если нет, вы можете удалить существующий файл pfx и повторить попытку.

...