如何将证书从一个Azure密钥保管库复制到另一个?

时间:2019-03-27 18:12:26

标签: azure certificate azure-keyvault

我试图将一个证书库中的证书复制到另一个证书库中,而不将其保存在本地计算机上。我看起来Azure KeyVault CLI仅支持像这样的基于文件的证书导入:

# download cert 
az keyvault certificate download --file $certFileName --vault-name $sourceAkv -n $certName

# import cert 
az keyvault certificate import --file $certFileName --vault-name $destAkv -n $certName

是否可以通过任何方法传递对象或字符串?在Azure Powershell模块中,这是可能的:

Import-AzureKeyVaultCertificate -VaultName $DestinationVaultName -Name $CertificateName -CertificateString $secretText.SecretValueText 

有想法吗?

2 个答案:

答案 0 :(得分:1)

您似乎无法将证书上下文仅导入到Azure Keyvault。它仅具有取决于证书文件的参数。

答案 1 :(得分:0)

我发现类似的东西可以在PowerShell中工作,以将证书和密钥导出为对象,然后将其导入到另一个密钥库中,而不必将其另存为临时PFX文件。

$CertName = 'mycert'
$SrcVault = 'mysourcekeyvault'
$DstVault = 'mydestinationkeyvault'
$cert = Get-AzKeyVaultCertificate -VaultName $SrcVault -Name $CertName
$secret = Get-AzKeyVaultSecret -VaultName $SrcVault -Name $cert.Name
$secretValueText = '';
$ssPtr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secret.SecretValue)
try {
    $secretValueText = [System.Runtime.InteropServices.Marshal]::PtrToStringBSTR($ssPtr)
}
finally {
    [System.Runtime.InteropServices.Marshal]::ZeroFreeBSTR($ssPtr)
}
$secretByte = [Convert]::FromBase64String($secretValueText)
$x509Cert = new-object System.Security.Cryptography.X509Certificates.X509Certificate2
$x509Cert.Import($secretByte, "", "Exportable,PersistKeySet")
Import-AzKeyVaultCertificate -VaultName $DstVault -Name $CertName -CertificateCollection $x509Cert