我在Azure Key Vault中有一个.pfx证书。我需要从中检索私钥以解密Sping Boot 应用程序中的字符串值。
我已经使用azure-spring-boot-starter-keyvault-certificates库将证书加载到java密钥存储库,这似乎工作正常。
我不明白的是如何检索私钥部分。有什么线索可以告诉我我做错了什么吗?
KeyStore azureKeyVaultKeyStore = KeyStore.getInstance("AzureKeyVault");
KeyVaultLoadStoreParameter parameter = new KeyVaultLoadStoreParameter(
System.getProperty("azure.keyvault.uri"),
System.getProperty("azure.keyvault.tenant-id"),
System.getProperty("azure.keyvault.client-id"),
System.getProperty("azure.keyvault.client-secret"));
azureKeyVaultKeyStore.load(parameter);
// returns null!
PrivateKey privateKey = (PrivateKey) azureKeyVaultKeyStore.getKey(environment.getProperty("azure.keyvault.alias"), "".toCharArray());
// decrypt value
Cipher c = Cipher.getInstance(privateKey.getAlgorithm());
c.init(Cipher.DECRYPT_MODE, privateKey);
c.update(DatatypeConverter.parseBase64Binary(cryptedMsg));
String decryptedMessage = new String(c.doFinal());
字符串
在我的机器上使用相同的证书进行测试,如下所示:
KeyStore keyStore = KeyStore.getInstance("pkcs12");
keyStore.load(new FileInputStream(filename), password.toCharArray());
PrivateKey privateKey = (PrivateKey) keyStore.getKey(alias, password.toCharArray());
型
2条答案
按热度按时间0pizxfdo1#
私钥可以使用GetSecret()方法检索,否则只能获得公钥部分。
有关详细信息,请参阅this文章(即使对于.NET也很难,我希望您能弄清楚如何在Java中实现它)或参阅Java示例here
a0x5cqrl2#
通常,KMS不允许密钥离开管理边界。这意味着getKey会生成密钥的公共部分。标有exportable的密钥只能完全导出。如果我是正确的,这只能在创建时设置。有关更多信息,请访问https://learn.microsoft.com/en-us/rest/api/keyvault/keys/create-key/create-key?view=rest-keyvault-keys-7.4&tabs=HTTP#keyattributes