首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从Azure进口证书?

问如何从Azure进口证书?
EN

Stack Overflow用户
提问于 2017-02-06 15:35:34
回答 1查看 1.3K关注 0票数 0

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

我们几乎什么都试过了,下一个错误是:

“您没有获得为证书分配密钥库所需的服务主信息的权限。请使用订阅的所有者或Active Directory的管理员的帐户登录,以配置密钥库设置。”

但我们有权限..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-19 03:02:31

@Sasha,这里没有太多的细节,我不想说出显而易见的事实,因为您已经尝试了一切,但是错误信息非常清楚--“您没有获得所需的服务主体信息的权限”。

有些事情需要澄清和检查:

  1. 您是否购买了Azure“应用服务证书”?
  2. 证书是否处于“签发”状态?
  3. 您是以订阅所有者的身份登录,还是所有者授予您对其订阅的管理员访问权限?我相信后者还不够好。
  4. 你完成了三步验证过程了吗?

如果您这样做了,您的证书现在存储在一个Azure密钥库。创建Azure密钥库时,有一个高级访问策略选项,用于“启用对Azure虚拟机的访问以进行部署”(见图)。它的帮助信息是:“指定是否允许Azure虚拟机从密钥库检索作为机密存储的证书。”

​

尽管如此,由于您想要一个.pfx文件,下面是从MSDN中提取的示例PowerShell脚本。为下面的四个"$“参数提供适当的值,并将脚本保存为copyasc.ps1。

代码语言:javascript
复制
$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控制台中键入以下命令以执行脚本:

代码语言:javascript
复制
Powershell –ExecutionPolicy Bypass
.\copyasc.ps1

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42071549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档