Я не уверен, каков точный вопрос, но похоже, что вы хотите написать код, который подписывает данные с помощью закрытого ключа от HSM и работает в AWS и Google Cloud.Для этого выполните следующие действия:
- Загрузка поставщика
- Открытие хранилища ключей
- Извлечение закрытого ключа
- Инициализация объекта подписи с помощьюзакрытый ключ (и обновите его данными для подписи)
- Знак
Шаг 1 можно выполнить программно (через Security.addProvider , как вы написалив вашем вопросе) или статически в файле java.security.Если вы хотите, чтобы ваш код не зависел от облачной платформы, на которой он запущен, вы можете рассмотреть возможность сделать это статически (хотя это также возможно сделать программно и сохранить независимость от платформы).
Остальноеиз шагов просто требуется довольно стандартный код JCE.Ниже приведен пример:
KeyStore keyStore = KeyStore.getInstance("type", "provider name");
PrivateKey privKey = (PrivateKey) keyStore.getKey("alias", null);
Signature sig = Signature.getInstance("transformation", "provider name");
sig.initSign(privKey);
sig.update(dataToSign);
byte[] signature = sig.sign();
Возможно, вы захотите прочитать имя поставщика и тип хранилища ключей из (защищенного) файла конфигурации, чтобы они не были жестко запрограммированы.После того, как вы начнете работать, вы захотите посмотреть, как часто вы заходите в хранилище ключей для извлечения ключевых объектов и, возможно, рассмотрите возможность их кэширования, поскольку извлечение хранилища ключей может быть дорогим, в зависимости от используемого HSM и библиотеки провайдера.,Это выходит за рамки этого вопроса или, по крайней мере, того, чем я интерпретирую этот вопрос, поэтому я на этом остановлюсь.Надеюсь, это поможет.