我在Azure DevOps中运行CI集成测试,运行在安装了构建代理的专用Azure VM上。这些测试要求在该VM上安装客户端SSL证书。作为CI的构建步骤,我有一个PS脚本,该脚本使用Azure KeyVault证书并将其导入到VM的LocalMachine / My存储中。虽然导入了证书,但我可以在VM中看到它,但是使用证书无法从CI进行测试。请注意,在尝试在VM中手动导出时,证书的带私钥导出选项显示为灰色。
当我在VM上手动运行相同的PS脚本,然后运行CI测试(禁用PS步骤)时,将成功测试消费者证书并通过。
我应该在下面的PS脚本中进行哪些更改,以便它(正在远程运行)将导入启用了导出并带有私钥选项的证书?
$vaultName = "MyKeyVault-stest"
$secretName = "MyCertificate"
$kvSecret = Get-AzureKeyVaultSecret -VaultName $vaultName -Name $secretName
$kvSecretBytes = [System.Convert]::FromBase64String($kvSecret.SecretValueText)
$kvSecretPass = 'myPass'
#-----------------------------------------------------------------------------
$pfxCertObject=New-Object System.Security.Cryptography.X509Certificates.X509Certificate2 -ArgumentList @($kvSecretBytes, "", [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable)
$newcertbytes = $pfxCertObject.Export([System.Security.Cryptography.X509Certificates.X509ContentType]::Pkcs12, $kvSecretPass)
$newCert=New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
$newCert.Import($newcertbytes,$kvSecretPass,[System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable)
#-------------------------------------------------------------------------------
$certStore = Get-Item "Cert:\LocalMachine\My"
$openFlags = [System.Security.Cryptography.X509Certificates.OpenFlags]::ReadWrite
$certStore.Open($openFlags)
$certStore.Add($newCert)
Write-host $env:USERNAME
Write-host $(whoami)
答案 0 :(得分:0)
如果要导入PFX以将其添加到持久存储中,则要指定X509KeyStorageFlags.PersistKeySet
标志。如果您不这样做,则垃圾回收器在某个不确定的点之后会发现没人在乎该密钥,然后要求Windows删除它...然后添加到X509Store的版本将无法再找到其密钥。
其他阅读: