Spring Boot 在Sping Boot 应用程序中从Azure Key Vault中删除私钥

vm0i2vca  于 2024-01-06  发布在  Spring
关注(0)|答案(2)|浏览(188)

我在Azure Key Vault中有一个.pfx证书。我需要从中检索私钥以解密Sping Boot 应用程序中的字符串值。
我已经使用azure-spring-boot-starter-keyvault-certificates库将证书加载到java密钥存储库,这似乎工作正常。
我不明白的是如何检索私钥部分。有什么线索可以告诉我我做错了什么吗?

  1. KeyStore azureKeyVaultKeyStore = KeyStore.getInstance("AzureKeyVault");
  2. KeyVaultLoadStoreParameter parameter = new KeyVaultLoadStoreParameter(
  3. System.getProperty("azure.keyvault.uri"),
  4. System.getProperty("azure.keyvault.tenant-id"),
  5. System.getProperty("azure.keyvault.client-id"),
  6. System.getProperty("azure.keyvault.client-secret"));
  7. azureKeyVaultKeyStore.load(parameter);
  8. // returns null!
  9. PrivateKey privateKey = (PrivateKey) azureKeyVaultKeyStore.getKey(environment.getProperty("azure.keyvault.alias"), "".toCharArray());
  10. // decrypt value
  11. Cipher c = Cipher.getInstance(privateKey.getAlgorithm());
  12. c.init(Cipher.DECRYPT_MODE, privateKey);
  13. c.update(DatatypeConverter.parseBase64Binary(cryptedMsg));
  14. String decryptedMessage = new String(c.doFinal());

字符串
在我的机器上使用相同的证书进行测试,如下所示:

  1. KeyStore keyStore = KeyStore.getInstance("pkcs12");
  2. keyStore.load(new FileInputStream(filename), password.toCharArray());
  3. PrivateKey privateKey = (PrivateKey) keyStore.getKey(alias, password.toCharArray());

0pizxfdo

0pizxfdo1#

私钥可以使用GetSecret()方法检索,否则只能获得公钥部分。
有关详细信息,请参阅this文章(即使对于.NET也很难,我希望您能弄清楚如何在Java中实现它)或参阅Java示例here

a0x5cqrl

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

相关问题