我正在构建一个由Azure Key Vault(AKV)支持的xml文档签名API。
我有一个导入AKV的不对称证书,存储为[密钥,密钥和证书]。
我已设法签署该文件,但我认为我没有得到正确的密钥。
Java XML数字签名API需要密钥对(私有/公共)来获取一些信息。
我修改了一个我找到here的提供程序,现在从AKV而不是java实现调用签名过程。
问题是,当我从AKV获得密钥时,只有公钥才会出现。 私钥存储为Secret,当我尝试将值转换为PrivateKey的实例时,我遇到了麻烦。
如何将 SecretBundle 值转换为 java.security.PrivateKey 的实例?
提前致谢。
答案 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。
希望有所帮助