【问题标题】:How to import certificate from Azure?如何从 Azure 导入证书?
【发布时间】:2017-06-23 14:48:28
【问题描述】:

我们通过 Azure 购买了一个证书,并希望在同一个 VM 上使用它。 我们只需要 .pfx 文件。

我们几乎尝试了所有方法,但出现了下一个错误:

"您无权获取服务主体信息 需要将 Key Vault 分配给您的证书。请使用 订阅的所有者或管理员的帐户 Active Directory 以配置 Key Vault 设置。”

但是我们有权限...

【问题讨论】:

  • 我们不想在 VM 外部使用 ssl 证书,但我们也不知道如何将其分配给已创建的 VM...
  • 您能否分享一些有关您如何尝试执行此操作的代码。您现在提供的信息仅表明您没有足够的权限来访问您的 Key Vault。您是以所有者还是管理员身份登录的?
  • 嗨@Peter,作为管理员,但我已经在stackoverflow上找到了这个nkv.name/screenshots/2017-02-06_175455.png所以我认为这是不可能的:(

标签: azure ssl certificate ssl-certificate pfx


【解决方案1】:

@Sasha,这里没有太多详细信息,鉴于您已经尝试了所有操作,我不想说明这一点,但错误消息非常清楚 - “您无权获取服务主体所需信息”。

需要澄清和检查的一些事情:

  1. 您是否购买了 Azure“应用服务证书”?
  2. 证书是否处于“已颁发”状态?
  3. 您是作为订阅所有者登录的,还是所有者授予您订阅的管理员权限?我相信后者还不够好。
  4. 您是否完成了三步验证流程?

如果您完成了所有这些操作,您的证书现在将存储在 Azure Key Vault 中。创建 Azure Key Vault 时,有一个高级访问策略选项可用于“启用对 Azure 虚拟机的访问以进行部署”(参见图片)。它的帮助信息显示,“指定是否允许 Azure 虚拟机从密钥保管库中检索存储为机密的证书。”



也就是说,由于您需要一个 .pfx 文件,因此下面是从 MSDN 博客中提取的示例 PowerShell 脚本来执行此操作。为下面的四个“$”参数提供适当的值并将脚本保存为 copyasc.ps1。

$appServiceCertificateName = ""
$resourceGroupName = ""
$azureLoginEmailId = ""
$subscriptionId = ""

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
[io.file]::WriteAllBytes(".\appservicecertificate.pfx", $pfxCertObject.Export([System.Security.Cryptography.X509Certificates.X509ContentType]::Pkcs12, $pfxPassword))
Write-Host "Created an App Service Certificate copy at: $currentDirectory\appservicecertificate.pfx"
Write-Warning "For security reasons, do not store the PFX password. Use it directly from the console as required."
Write-Host "PFX password: $pfxPassword"

在 PowerShell 控制台中键入以下命令以执行脚本:

Powershell –ExecutionPolicy Bypass
.\copyasc.ps1

脚本执行后,您会在当前目录中看到一个名为“appservicecertificate.pfx”的新文件。这是一个受密码保护的 PFX,PowerShell 控制台会显示相应的密码。

【讨论】:

  • 我从其他帐户获得了管理员权限。 #3对我来说不是真的。你还能帮忙吗?
猜你喜欢
  • 2011-08-27
  • 1970-01-01
  • 2014-11-10
  • 1970-01-01
  • 2015-05-04
  • 1970-01-01
  • 2019-04-02
  • 2013-04-25
  • 1970-01-01
相关资源
最近更新 更多