0

我在 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());
4

1 回答 1

0

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

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

于 2021-04-22T17:03:59.420 回答