java - Google Cloud HSM 作为加密提供商
问题描述
AWS 似乎允许我们将 AWS Cloud HSM 作为提供商,请参阅此处和此处
Security.addProvider(new com.cavium.provider.CaviumProvider())
然而,在 GKE 的样本中,我们似乎只有充气城堡作为提供者。看这里
Security.addProvider(new BouncyCastleProvider());
也许我错过了一些基本的东西。
想要按照 JCA API 进行初始化
解决方案
我不确定确切的问题是什么,但看起来您想编写代码,使用来自 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 和提供程序库。这有点超出了这个问题的范围,或者至少我正在解释这个问题,所以我会停在那里。希望有帮助。
推荐阅读
- javascript - 将字符串与组件中的 react/Javascript 中收到的 prop 值连接起来
- excel - 对没有特定列的两行求和
- python - 在没有用户交互的情况下存储数据
- react-native - 如何挂钩对象数组的属性更改?
- c++ - Xor Template Visual Studio INTELLISENSE 错误
- python - 用 Python 阅读 Lotus Notes
- c# - 使用 Serilog 自动记录 Visual Studio 扩展的未处理异常
- c - 我在可视代码 arm64 中遇到此代码的分段错误?
- leaflet - 带有EPSG:25833光栅图像的GDAL2tiles破坏了瓷砖中的黑色错字
- python - 提交和推送后在 docker 容器中找不到 conda 命令