我在 Azure Key Vault 中有一个 .pfx 证书。我需要从中检索私钥以解密我的 Spring 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());
通常,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