使用 AWS CloudHSM KeyStore Java 类 - AWS CloudHSM

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 AWS CloudHSM KeyStore Java 类

该 AWS CloudHSM KeyStore类提供了一个特殊用途的 PKCS12 密钥存储库。该密钥库可以将证书与您的密钥数据一起存储,并将它们与存储在 AWS CloudHSM上的密钥数据相关联。该 AWS CloudHSM KeyStore类实现了 Java 密码学扩展 (JCE) 的KeyStore服务提供者接口 (SPI)。有关使用的更多信息KeyStore,请参阅 C lass KeyStore

注意

由于证书是公共信息,并且为了最大限度地提高加密密钥的存储容量,因此 AWS CloudHSM 不支持在 HSM 上存储证书。

选择适当的密钥库

AWS CloudHSM Java 加密扩展 (JCE) 提供商提供特殊用途的 AWS CloudHSM。 KeyStore该 AWS CloudHSM KeyStore类支持将密钥操作卸载到 HSM、证书的本地存储和基于证书的操作。

按如下方式加载特殊用途 KeyStore CloudHSM:

KeyStore ks = KeyStore.getInstance("CloudHSM")

正在初始化 AWS CloudHSM KeyStore

使用与登录 JCE 提供程序相同的方式登录。 AWS CloudHSM KeyStore 您可以使用环境变量或系统属性文件,并且应该在开始使用 CloudHSM KeyStore 之前登录。有关使用 JCE 提供程序登录 HSM 的示例,请参阅登录到 HSM

如果需要,您可以指定密码以加密保存密钥库数据的本地 PKCS12 文件。创建 AWS CloudHSM 密钥库时,需要设置密码,并在使用加载、设置和获取方法时提供密码。

按如下方式实例化一个新的 CloudHSM 对象 KeyStore :

ks.load(null, null);

使用 store 方法将密钥库数据写入文件。从那时起,您可以使用带有源文件和密码的 load 方法加载现有密钥库,如下所示:

ks.load(inputStream, password);

使用 AWS CloudHSM KeyStore

AWS CloudHSM KeyStore 符合 JCE 类KeyStore规范,并提供以下功能。

  • load

    从给定输入流加载密钥库。如果在保存密钥库时设置了密码,则必须提供相同的密码才能成功加载。将两个参数都设置为 null 可以初始化一个新的空密钥库。

    KeyStore ks = KeyStore.getInstance("CloudHSM"); ks.load(inputStream, password);
  • aliases

    返回给定密钥库实例中所有条目的别名的枚举。结果包括本地存储在 PKCS12 文件中的对象和驻留在 HSM 上的对象。

    示例代码:

    KeyStore ks = KeyStore.getInstance("CloudHSM"); for(Enumeration<String> entry = ks.aliases(); entry.hasMoreElements();) { String label = entry.nextElement(); System.out.println(label); }
  • containsalias

    如果密钥库可以访问至少一个具有指定别名的对象,则返回 true。密钥库检查本地存储在 PKCS12 文件中的对象和驻留在 HSM 上的对象。

  • deleteEntry

    从本地 PKCS12 文件中删除证书条目。不支持使用删除存储在 HSM 中的密钥数据。 AWS CloudHSM KeyStore您可以使用 Destroyable 接口的 destroy 方法删除密钥。

    ((Destroyable) key).destroy();
  • getCertificate

    返回与别名关联的证书(如果可用)。如果别名不存在或引用的对象不是证书,则该函数返回 NULL。

    KeyStore ks = KeyStore.getInstance("CloudHSM"); Certificate cert = ks.getCertificate(alias);
  • getCertificateAlias

    返回其数据与给定证书匹配的第一个密钥库条目的名称(别名)。

    KeyStore ks = KeyStore.getInstance("CloudHSM"); String alias = ks.getCertificateAlias(cert);
  • getCertificateChain

    返回与给定别名关联的证书链。如果别名不存在或引用的对象不是证书,则该函数返回 NULL。

  • getCreationDate

    返回由给定别名标识的条目的创建日期。如果创建日期不可用,则函数返回证书生效的日期。

  • getKey

    GetKey 传递给 HSM 并返回与给定标签对应的密钥对象。当getKey直接查询 HSM 时,它可以用于 HSM 上的任何密钥,无论该密钥是否由生成。 KeyStore

    Key key = ks.getKey(keyLabel, null);
  • isCertificateEntry

    检查具有给定别名的条目是否表示证书条目。

  • isKeyEntry

    检查具有给定别名的条目是否表示密钥条目。该操作同时搜索 PKCS12 文件和 HSM 以查找别名。

  • setCertificateEntry

    将给定证书分配给给定别名。如果给定的别名已被用于标识密钥或证书,则会引发 KeyStoreException。您可以使用 JCE 代码获取密钥对象,然后使用 KeyStore SetKeyEntry方法将证书与密钥相关联。

  • 使用 byte[] 密钥执行 setKeyEntry

    客户端软件开发工具包 5 目前不支持此 API。

  • 使用 Key 对象执行 setKeyEntry

    将给定密钥分配到给定别名并将其存储在 HSM 中。如果 HSM 中尚不存在该密钥,则会将其作为可提取的会话密钥导入 HSM。

    如果 Key 对象属于类型 PrivateKey,则它必须伴随相应的证书链。

    如果别名已存在,则 SetKeyEntry 调用会引发 KeyStoreException,并阻止该密钥被覆盖。如果密钥必须被覆盖,请为此目的使用 KMU 或 JCE。

  • engineSize

    返回密钥库中的条目数。

  • store

    将密钥库存储作为 PKCS12 文件存储到给定输出流,并使用给定的密码保护它。此外,它会保留所有加载的密钥(使用 setKey 调用进行设置)。