如何从Azure Key Vault检索PrivateKey

时间:2018-06-01 20:43:33

标签: java azure azure-keyvault xml-signature jca

我正在构建一个由Azure Key Vault(AKV)支持的xml文档签名API。

  

我有一个导入AKV的不对称证书,存储为[密钥,密钥和证书]。

我已设法签署该文件,但我认为我没有得到正确的密钥。

  

Java XML数字签名API需要密钥对(私有/公共)来获取一些信息。

我修改了一个我找到here的提供程序,现在从AKV而不是java实现调用签名过程。

问题是,当我从AKV获得密钥时,只有公钥才会出现。 私钥存储为Secret,当我尝试将值转换为PrivateKey的实例时,我遇到了麻烦。

如何将 SecretBundle 值转换为 java.security.PrivateKey 的实例?

提前致谢。

1 个答案:

答案 0 :(得分:0)

以下是我将Secret转换为证书文件的方法。您可以将其转换为Java。

$kvSecret = Get-AzureKeyVaultSecret -VaultName 'VaultFromCode' -Name 'TestCertificate'
$kvSecretBytes = [System.Convert]::FromBase64String($kvSecret.SecretValueText)
$certCollection = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2Collection
$certCollection.Import($kvSecretBytes,$null,[System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable)
$protectedCertificateBytes = $certCollection.Export([System.Security.Cryptography.X509Certificates.X509ContentType]::Pkcs12, 'test')
$pfxPath = 'C:\cert\test.pfx'
[System.IO.File]::WriteAllBytes($pfxPath, $protectedCertificateBytes)

您可以在我的帖子中找到更多详细信息 - Manage Certificates in Azure Key Vault。您还可以在Key Vault中找到有关可导出和不可导出证书的一些详细信息,以及如何将这些证书用于sign a PDF file

希望有所帮助