AWS似乎允许我们将AWS Cloud HSM作为提供者,请参见here和here
Security.addProvider(new com.cavium.provider.CaviumProvider())
但是,在GKE的样本中,我们似乎只有充气城堡作为提供者。参见here
Security.addProvider(new BouncyCastleProvider());
也许我缺少一些基本知识。
想按照以下JCA API进行initsign
答案 0 :(得分:0)
我不确定确切的问题是什么,但是看起来您想编写使用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和提供程序库用过的。这超出了这个问题的范围,或者至少是我要解释的问题的范围,所以我将在此处停止。希望有帮助。