安装并使用客户端 SDK 3 的 AWS CloudHSM JCE 提供程序 - AWS CloudHSM

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

安装并使用客户端 SDK 3 的 AWS CloudHSM JCE 提供程序

在使用 JCE 提供程序之前,需要 AWS CloudHSM 客户端。

客户端是一个守护程序,用于与集群中的 HSM 建立 end-to-end 加密通信。JCE 提供程序在本地与客户端通信。如果您尚未安装和配置 AWS CloudHSM 客户端软件包,请立即按照中的步骤进行操作安装客户端 (Linux)。在您安装和配置客户端之后,可以使用以下命令来启动客户端。

请注意 JCE 提供程序仅在 Linux 和兼容的操作系统中受支持。

Amazon Linux
$ sudo start cloudhsm-client
Amazon Linux 2
$ sudo systemctl cloudhsm-client start
CentOS 7
$ sudo systemctl cloudhsm-client start
CentOS 8
$ sudo systemctl cloudhsm-client start
RHEL 7
$ sudo systemctl cloudhsm-client start
RHEL 8
$ sudo systemctl cloudhsm-client start
Ubuntu 16.04 LTS
$ sudo systemctl cloudhsm-client start
Ubuntu 18.04 LTS
$ sudo systemctl cloudhsm-client start
Ubuntu 20.04 LTS
$ sudo systemctl cloudhsm-client start

安装 JCE 提供程序

使用以下命令下载和安装 JCE 提供程序。此提供程序仅在 Linux 和兼容的操作系统上受支持。

注意

有关升级,请参阅升级客户端软件开发工具包 3

Amazon Linux
$ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL6/cloudhsm-client-jce-latest.el6.x86_64.rpm
$ sudo yum install ./cloudhsm-client-jce-latest.el6.x86_64.rpm
Amazon Linux 2
$ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL7/cloudhsm-client-jce-latest.el7.x86_64.rpm
$ sudo yum install ./cloudhsm-client-jce-latest.el7.x86_64.rpm
CentOS 7
$ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL7/cloudhsm-client-jce-latest.el7.x86_64.rpm
$ sudo yum install ./cloudhsm-client-jce-latest.el7.x86_64.rpm
CentOS 8
$ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL8/cloudhsm-client-jce-latest.el8.x86_64.rpm
$ sudo yum install ./cloudhsm-client-jce-latest.el8.x86_64.rpm
RHEL 7
$ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL7/cloudhsm-client-jce-latest.el7.x86_64.rpm
$ sudo yum install ./cloudhsm-client-jce-latest.el7.x86_64.rpm
RHEL 8
$ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL8/cloudhsm-client-jce-latest.el8.x86_64.rpm
$ sudo yum install ./cloudhsm-client-jce-latest.el8.x86_64.rpm
Ubuntu 16.04 LTS
$ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Xenial/cloudhsm-client-jce_latest_amd64.deb
$ sudo apt install ./cloudhsm-client-jce_latest_amd64.deb
Ubuntu 18.04 LTS
$ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Bionic/cloudhsm-client-jce_latest_u18.04_amd64.deb
$ sudo apt install ./cloudhsm-client-jce_latest_u18.04_amd64.deb

运行上述命令后,可以找到以下 JCE 提供程序文件:

  • /opt/cloudhsm/java/cloudhsm-version.jar

  • /opt/cloudhsm/java/cloudhsm-test-version.jar

  • /opt/cloudhsm/java/hamcrest-all-1.3.jar

  • /opt/cloudhsm/java/junit.jar

  • /opt/cloudhsm/java/log4j-api-2.17.1.jar

  • /opt/cloudhsm/java/log4j-core-2.17.1.jar

  • /opt/cloudhsm/lib/libcaviumjca.so

验证安装

在 HSM 上执行基本操作来验证安装。

验证 JCE 提供程序的安装
  1. (可选)如果您尚未在您的环境中安装 Java,可使用以下命令安装它。

    Linux (and compatible libraries)
    $ sudo yum install java-1.8.0-openjdk
    Ubuntu
    $ sudo apt-get install openjdk-8-jre
  2. 使用以下命令可设置必要的环境变量。将 <HSM user name><password> 替换为加密用户 (CU) 的凭证。

    $ export LD_LIBRARY_PATH=/opt/cloudhsm/lib
    $ export HSM_PARTITION=PARTITION_1
    $ export HSM_USER=<HSM user name>
    $ export HSM_PASSWORD=<password>
  3. 使用以下命令可运行基本功能测试。如果成功,命令的输出应该与下面的输出类似。

    $ java8 -classpath "/opt/cloudhsm/java/*" org.junit.runner.JUnitCore TestBasicFunctionality JUnit version 4.11 .2018-08-20 17:53:48,514 DEBUG [main] TestBasicFunctionality (TestBasicFunctionality.java:33) - Adding provider. 2018-08-20 17:53:48,612 DEBUG [main] TestBasicFunctionality (TestBasicFunctionality.java:42) - Logging in. 2018-08-20 17:53:48,612 INFO [main] cfm2.LoginManager (LoginManager.java:104) - Looking for credentials in HsmCredentials.properties 2018-08-20 17:53:48,612 INFO [main] cfm2.LoginManager (LoginManager.java:122) - Looking for credentials in System.properties 2018-08-20 17:53:48,613 INFO [main] cfm2.LoginManager (LoginManager.java:130) - Looking for credentials in System.env SDK Version: 2.03 2018-08-20 17:53:48,655 DEBUG [main] TestBasicFunctionality (TestBasicFunctionality.java:54) - Generating AES Key with key size 256. 2018-08-20 17:53:48,698 DEBUG [main] TestBasicFunctionality (TestBasicFunctionality.java:63) - Encrypting with AES Key. 2018-08-20 17:53:48,705 DEBUG [main] TestBasicFunctionality (TestBasicFunctionality.java:84) - Deleting AES Key. 2018-08-20 17:53:48,707 DEBUG [main] TestBasicFunctionality (TestBasicFunctionality.java:92) - Logging out. Time: 0.205 OK (1 test)

向 JCE 提供程序提供凭证

HSM 需要先验证 Java 应用程序,之后该应用程序才能使用 HSM。每个应用程序均可使用一个会话。HSM 使用显式登录或隐式登录方法来验证会话。

显式登录:此方法可让您直接在应用程序中提供 CloudHSM 凭证。它使用 LoginManager.login() 方法,在其中传递 CU 用户名、密码和 HSM 分区 ID。有关使用显式登录方法的更多信息,请参阅登录到 HSM 代码示例。

隐式登录:此方法可让您在新属性文件或系统属性中设置 CloudHSM 凭证,或将此类凭证设置为环境变量。

  • 新属性文件:创建一个名为 HsmCredentials.properties 的新文件,然后将该文件添加到应用程序的 CLASSPATH。该文件应包含以下内容:

    HSM_PARTITION = PARTITION_1 HSM_USER = <HSM user name> HSM_PASSWORD = <password>
  • 系统属性:在运行应用程序时通过系统属性设置凭证。以下示例演示了可执行此操作的两种不同方式:

    $ java -DHSM_PARTITION=PARTITION_1 -DHSM_USER=<HSM user name> -DHSM_PASSWORD=<password>
    System.setProperty("HSM_PARTITION","PARTITION_1"); System.setProperty("HSM_USER","<HSM user name>"); System.setProperty("HSM_PASSWORD","<password>");
  • 环境变量:将凭证设置为环境变量。

    $ export HSM_PARTITION=PARTITION_1 $ export HSM_USER=<HSM user name> $ export HSM_PASSWORD=<password>

如果应用程序未提供凭证,或者在 HSM 验证会话前尝试执行操作,则凭证可能不可用。在这些情况下,适用于 Java 的 CloudHSM 软件库按以下顺序搜索凭证:

  1. HsmCredentials.properties

  2. 系统属性

  3. 环境变量

错误处理

通过显式登录方法处理错误比通过隐式登录方法处理错误更轻松。在使用 LoginManager 类时,您可以更好地控制应用程序处理失败情况的方式。当凭证无效或 HSM 在验证会话时遇到问题时,隐式登录方法使得难以理解错误处理。

JCE 提供程序中的密钥管理基础知识

JCE 提供程序中密钥管理的基础知识涉及导入密钥、导出密钥、通过句柄加载密钥或删除密钥。有关管理密钥的更多信息,请参阅管理密钥代码示例。

另外,您可以在 代码示例 中找到更多 JCE 提供程序代码示例。