Получение закрытого ключа из хранилища ключей Azure в приложении Spring Boot

У меня есть сертификат .pfx в Azure Key Vault. Мне нужно получить из этого закрытый ключ, чтобы расшифровать строковое значение в моем приложении 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());

1 ответ

Закрытый ключ можно получить с помощью метода GetSecret (), в противном случае вы получите только общедоступную часть.

Подробнее см. В этой статье (даже если это сложно для .NET, я надеюсь, вы сможете понять, как это сделать на Java) или посмотрите примеры Java здесь.

Другие вопросы по тегам