【问题标题】:Imported by PS script certificate has broken Private Key由 PS 脚本导入的证书已损坏私钥
【发布时间】:2019-06-10 08:16:14
【问题描述】:

我正在 Azure DevOps 中运行 CI 集成测试,运行发生在安装了构建代理的专用 Azure VM 上。这些测试要求在该 VM 上安装客户端 SSL 证书。作为 CI 中的构建步骤,我有一个 PS 脚本,它使用 Azure KeyVault 证书并将其导入到 LocalMachine/My 的 VM 存储中。虽然导入了证书并且我可以在 VM 中看到它,但来自 CI 的测试使用证书失败。请注意,当尝试在 VM 中手动导出证书时,Export with Private Key 选项灰显。

当我使用 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)

【问题讨论】:

    标签: azure-devops ssl-certificate private-key


    【解决方案1】:

    如果您要导入 PFX 以将其添加到持久存储中,您需要指定 X509KeyStorageFlags.PersistKeySet 标志。如果您不这样做,稍后垃圾收集器会在某个未确定的时间点注意到没有人关心该密钥,然后要求 Windows 将其删除......然后添加到 X509Store 的版本将无法再找到它的密钥。

    其他阅读:

    【讨论】:

      猜你喜欢
      • 2020-07-14
      • 1970-01-01
      • 2020-01-17
      • 2011-01-03
      • 2019-12-06
      • 1970-01-01
      • 1970-01-01
      • 2014-11-26
      • 1970-01-01
      相关资源
      最近更新 更多