如果你想用自己的私鑰以及檢索您的證書,那麼你可以導出它通過您的磁盤上的一個PFX文件(密碼爲空):
$vaultName = "my-vault-name"
$certificateName = "my-cert-name"
$pfxPath = [Environment]::GetFolderPath("Desktop") + "\$certificateName.pfx"
$pfxSecret = Get-AzureKeyVaultSecret -VaultName $vaultName -Name $certificateName
$pfxUnprotectedBytes = [Convert]::FromBase64String($pfxSecret.SecretValueText)
[IO.File]::WriteAllBytes($pfxPath, $pfxUnprotectedBytes)
如果你想查看剛纔在內存中的私有密鑰本身沒有寫入磁盤,然後嘗試:
$vaultName = "my-vault-name"
$certificateName = "my-cert-name"
$pfxPath = [Environment]::GetFolderPath("Desktop") + "\$certificateName.pfx"
$pfxSecret = Get-AzureKeyVaultSecret -VaultName $vaultName -Name $certificateName
$pfxUnprotectedBytes = [Convert]::FromBase64String($pfxSecret.SecretValueText)
$pfx = New-Object Security.Cryptography.X509Certificates.X509Certificate2
$pfx.Import($pfxUnprotectedBytes, $null, [Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable)
$pfx.PrivateKey.ExportParameters($true)
除了指數和模數外,還將顯示私有參數。
如果你想保護磁盤上的PFX文件用自己的密碼(按「檢索PFX文件&添加密碼改回」在this blog post指令),然後嘗試:
$vaultName = "my-vault-name"
$certificateName = "my-cert-name"
$pfxPath = [Environment]::GetFolderPath("Desktop") + "\$certificateName.pfx"
$password = "my-password"
$pfxSecret = Get-AzureKeyVaultSecret -VaultName $vaultName -Name $certificateName
$pfxUnprotectedBytes = [Convert]::FromBase64String($pfxSecret.SecretValueText)
$pfx = New-Object Security.Cryptography.X509Certificates.X509Certificate2
$pfx.Import($pfxUnprotectedBytes, $null, [Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable)
$pfxProtectedBytes = $pfx.Export([Security.Cryptography.X509Certificates.X509ContentType]::Pkcs12, $password)
[IO.File]::WriteAllBytes($pfxPath, $pfxProtectedBytes)
如REST API文檔here和here中所述,Azure密鑰保管庫(AKV)通過三個相互關聯的資源(AKV證書,AKV密鑰和AKV密鑰)表示給定的X.509證書。所有三者將共享相同的名稱和相同的版本 - 要驗證此情況,請檢查Get-AzureKeyVaultCertificate
的響應中的Id
,KeyId
和SecretId
屬性。
每個3個資源的用於觀看給定的X.509證書提供不同的角度:
- 的AKV證書提供了X.509證書的公鑰證書和元數據。它包含公鑰的模數和指數(
n
和e
)以及其他證書元數據(指紋,失效日期,主題名稱等)。在PowerShell中,您可以通過獲得此:
(Get-AzureKeyVaultCertificate -VaultName $vaultName -Name $certificateName).Certificate
- 的AKV鍵提供了X.509證書的私鑰。如果相應的證書被標記爲不可導出,那麼執行密碼操作(如簽名)可能會很有用。在PowerShell中,您只能獲得通過這個私鑰的公共部分:
(Get-AzureKeyVaultKey -VaultName $vaultName -Name $certificateName).Key
- 的AKV祕密提供了一種導出全X.509證書,包括其私人密鑰(如果其策略允許私鑰導出)。
(Get-AzureKeyVaultSecret -VaultName $vaultName -Name $certificateName).SecretValueText
非常徹底響應,由於阿德:如上所示,可以在PowerShell中通過以下方式獲得的電流base64編碼的證書!我已經開始認識到,我需要回避這個祕密,因爲powershell API不是最簡單易懂的--Certificate是一個陷阱:-)這有助於很好地解釋事情! –