Я выполняю интеграционные тесты CI в DevOps Azure, запуск происходит на выделенной виртуальной машине Azure с установленным агентом сборки. Эти тесты требуют, чтобы клиентский SSL-сертификат был установлен на этой виртуальной машине. На этапе сборки в CI у меня есть сценарий PS, который использует сертификат Azure KeyVault и импортирует его в LocalMachine / My store of VM. В то время как сертификат импортирован, и я вижу его в виртуальной машине, тесты из CI не с помощью сертификата. Обратите внимание, что при попытке вручную выполнить экспорт в виртуальную машину сертификат имеет параметр Экспорт с закрытым ключом , выделенный серым цветом.
Когда я запускаю тот же сценарий 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)