在 Spring Boot 应用程序中从 Azure Key Vault 检索私钥

问题描述 投票:0回答:2

我在 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());
spring-boot azure-keyvault azure-sdk-for-java
2个回答
0
投票

可以使用 GetSecret() 方法检索私钥,否则您只能获取公开部分。

请参阅this文章了解详细信息(即使对于.NET来说很难,我希望您能弄清楚如何在Java中做到这一点)或查看Java示例这里


0
投票

通常,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

© www.soinside.com 2019 - 2024. All rights reserved.