首页 > 解决方案 > Google Cloud HSM 作为加密提供商

问题描述

AWS 似乎允许我们将 AWS Cloud HSM 作为提供商,请参阅此处此处

Security.addProvider(new com.cavium.provider.CaviumProvider())

然而,在 GKE 的样本中,我们似乎只有充气城堡作为提供者。看这里

Security.addProvider(new BouncyCastleProvider());

也许我错过了一些基本的东西。

想要按照 JCA API 进行初始化

https://docs.oracle.com/javase/10/docs/api/java/security/Signature.html#initSign(java.security.PrivateKey)

标签: javaamazon-web-servicesgoogle-cloud-platformhsmjca

解决方案


我不确定确切的问题是什么,但看起来您想编写代码,使用来自 HSM 的私钥对数据进行签名,并在 AWS 和 Google Cloud 上运行。这样做的步骤是:

  1. 加载提供程序
  2. 打开密钥库
  3. 检索私钥
  4. 使用私钥初始化签名对象(并使用要签名的数据对其进行更新)
  5. 符号

步骤 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 和提供程序库。这有点超出了这个问题的范围,或者至少我正在解释这个问题,所以我会停在那里。希望有帮助。


推荐阅读