使用GVSM(NIST FIPS)密码机集群

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

本文介绍如何快速上手使用加密服务。

注意事项

前提条件

  • 已购买密码机。具体操作,请参见购买并启用密码机实例

  • 已购买Linux系统(CentOS 8Alibaba Cloud Linux)的ECS实例,且ECS实例需要和密码机实例在同一VPC。具体操作,请参见Linux系统实例快速入门

    说明

    ECS实例用于安装密码机管理工具,而非用于业务服务器。

步骤一:启用主密码机实例

一个集群中包括一个主密码机实例与若干个非主密码机实例。创建集群前,您需要启用主密码机实例。

  1. 访问加密服务控制台的虚拟密码机实例页面,在顶部菜单栏,选择目标地域。

  2. 虚拟密码机实例页面,定位到已创建的密码机实例,单击操作列的启用

  3. 密码机实例配置对话框,配置密码机实例,然后单击确定。配置成功后,密码机实例的状态变为已启用

    配置项

    说明

    所属的VPC网络ID

    选择密码机实例需要绑定的VPC。

    重要

    需要与您的ECS实例绑定的VPC是同一个。

    所属的VPC子网

    选择密码机实例所属的VPC子网网段。

    分配私网IP地址

    为密码机实例分配一个私网IP地址。

    重要
    • 私网IP地址必须是所属的VPC子网网段中的IP地址,否则配置将会失败。

    • 末位为253、254、255IP地址为系统保留地址,请勿使用。

    设置密码机实例白名单

    设置访问该密码机实例的白名单。您可以输入单个IP地址或网段地址,每行输入1条数据,最多可以输入10条数据。

    • 未设置白名单:所有IP地址都能访问密码机实例。

    • 设置了白名单:仅支持白名单内的访问请求,不在白名单内的访问请求将被拒绝。

    重要
    • 如果您创建了集群并设置了集群的白名单,那么集群的白名单优先级高于集群中密码机实例的白名单。

      例如,集群中密码机实例的白名单为10.10.10.10,集群的白名单为172.16.0.1,则您只能通过172.16.0.1访问集群中的密码机实例。

    • 不支持配置为0.0.0.0/0(放行所有来源IP)。

      基于安全考虑,不推荐您放行所有来源IP。如果因临时测试等原因确实需要放行所有来源IP,不配置白名单即可。

步骤二:创建并激活集群

集群内一个可用区的密码机实例使用同一VPC子网。

  1. 虚拟密码机实例页面,定位到主密码机实例,单击操作列的创建集群

  2. 创建并激活集群面板,完成①创建集群,然后单击下一步

    配置项

    说明

    集群名称

    自定义集群的名称。名称不能重复且长度不允许超过24个字符。

    设置集群访问白名单

    允许访问集群的IP地址。如果未设置白名单,则所有IP地址都能访问集群,如果设置了白名单,则不在白名单内的访问请求将被拒绝。

    您可以输入单个IP地址或网段地址,每行输入1条数据,最多可以输入10条数据。

    重要
    • 集群的白名单优先级高于集群中密码机实例的白名单。例如,您设置的集群中密码机实例的白名单为10.10.10.10,集群的白名单为172.16.0.1,则您只能通过172.16.0.1访问集群中的密码机实例。

    • 不支持配置为0.0.0.0/0(放行所有来源IP)。

      基于安全考虑,不推荐您放行所有来源IP。如果因临时测试等原因确实需要放行所有来源IP,不配置白名单即可。

    指定集群的交换机(2~4个)

    根据业务需要选择可用区的交换机。

    在密码机实例集群中,您至少配置2个交换机才能成功创建并激活集群。

  3. 创建并激活集群面板,完成②激活集群。

    1. 导入集群证书。

      1. 导入集群证书区域,单击集群CSR证书下载CSR证书文件,然后上传到ECS实例上保存。例如,保存为cluster.csr。

      2. 创建私钥,并根据提示设置私钥口令。例如,保存为issuerCA.key。

        openssl genrsa -aes256 -out issuerCA.key 2048
      3. 创建自签名证书。例如,保存为issuerCA.crt。

        openssl req -new -x509 -days 3652 -key issuerCA.key -out issuerCA.crt
      4. 签署集群CSR证书,颁发的集群证书存储在cluster.crt文件中。

        说明

        该步骤会使用到cluster.csr、issuerCA.key、issuerCA.crt文件。

        openssl x509 -req -in cluster.csr -days 3652 -CA issuerCA.crt -CAkey issuerCA.key -set_serial 01 -out cluster.crt
      5. 返回加密服务管理控制台,导入集群证书并单击提交

        • 请输入签发者证书(PEM编码)区域,输入issuerCA.crt文件的内容。

        • 请输入签发集群证书(PEM编码)区域,输入cluster.crt文件的内容。

    2. 初始化主密码机实例。

      重要

      仅支持通过密码机管理实例工具初始化主密码机实例,密码机实例管理工具仅支持安装在Linux操作系统。

      步骤

      说明

      步骤1:下载密码机实例管理工具。

      • CentOS

        • 方式一:访问hsm-client-v2.03.15.10-1.x86_64.rpm,下载密码机实例管理工具。

        • 方式二:执行如下命令下载密码机实例管理工具,该操作需要您的ECS服务器连接公网。

          wget -O hsm-client-v2.03.15.10-1.x86_64.rpm 'https://yundun-hsm4.oss-ap-southeast-1.aliyuncs.com/hsm-client-v2.03.15.10-1.x86_64.rpm'
        • 方式三:在实例列表页面,找到目标密码机实例,通过单击规格列的image图标。

        • 方式四:在激活集群页面,单击下载密码机实例管理工具

      • Debian

        访问hsm-client-2.03.15.10-20240710_1.x86_64.deb,下载密码机实例管理工具。

      步骤2:安装密码机管理工具。

      执行如下命令:请将程序和配置文件安装在/opt/hsm目录下。

      • CentOS

        请将示例中的hsm-client-v2.xx.x86_64.rpm替换为实际的工具名称。

        sudo yum install -y hsm-client-v2.xx.x86_64.rpm
      • Debian

        请将示例中的hsm-client-2.xx.x86_64.deb替换为实际的工具名称。

        sudo dpkg -i hsm-client-2.xx.x86_64.deb

      步骤3:修改客户端配置文件。

      在密码机管理工具的安装目录下,修改/opt/hsm/etc/hsm_mgmt_tool.cfg文件中的servers配置项。

      • name、hostname修改为主密码机的私有IP地址,您可以在实例列表页面查询IP。

      • owner_cert_path修改为issuerCA.crt的文件路径。

      hsm_mgmt_tool.cfg文件示例

      {
       "servers": [
       {
       "name" : "172.16.XX.XX",
       "hostname" : "172.16.XX.XX",
       "port" : 2225,
       "certificate": "/opt/hsm/etc/client.crt",
       "pkey": "/opt/hsm/etc/client.key",
       "CAfile": "",
       "CApath": "/opt/hsm/etc/certs",
       "ssl_ciphers": "",
       "server_ssl" : "yes",
       "enable" : "yes",
       "owner_cert_path":"<issuerCA.crt file path>"
       }],
       "scard": {
       "enable": "no",
       "port": 2225,
       "ssl": "no",
       "ssl_ciphers": "",
       "certificate": "cert-sc",
       "pkey": "pkey-sc"
       }
      }

      步骤4:登录主密码机并查看用户列表。

      1. 通过以下命令登录主密码机。

        /opt/hsm/bin/hsm_mgmt_tool /opt/hsm/etc/hsm_mgmt_tool.cfg
      2. 执行listUsers命令显示用户列表。

        cloudmgmt>listUsers
        Users on server 0(172.16.XX.XX):
        Number of users found:2
        
            User Id            User Type          User Name                     MofnPubKey       LoginFailureCnt            2FA
                 1             PRECO          admin                                       NO               0                     NO
                 2             AU             app_user                                    NO               0                     NO

      步骤5:将PRECO用户改为CO用户。

      1. 执行loginHSM命令并以PRECO身份登录加密机。

        server0>loginHSM PRECO admin password
        loginHSM success
      2. 执行changePswd命令修改PRECO用户的密码,当您更改密码后,PRECO用户将成为CO用户。

        cloudmgmt>changePswd PRECO admin <NewPassword>
        
        *************************CAUTION********************************
        This is a CRITICAL operation, should be done on all nodes in the
        cluster. Cav server does NOT synchronize these changes with the
        nodes on which this operation is not executed or failed, please
        ensure this operation is executed on all nodes in the cluster.
        ****************************************************************
        
        Do you want to continue(y/n)?y
        Changing password for admin(PRECO) on 1 nodes
      3. 通过listUsers命令查看用户列表,验证PRECO用户是否更改为CO用户。

        cloudmgmt>listUsers
        Users on server 0(172.16.XX.XX):
        Number of users found:2
        
            User Id            User Type          User Name                     MofnPubKey       LoginFailureCnt            2FA
                 1             CO             admin                                       NO               0                     NO
                 2             AU             app_user                                    NO               0                     NO

      步骤6:创建密码机操作员(CU用户)

      警告

      请您先创建CU用户,再将子密码机添加到集群,否则创建的CU用户不会自动同步至子密码机。

      1. 执行createUser命令创建一个CU。

        CU用户名和密码支持ASCII字符,其中CU用户名不超过20个字符,密码为8~32个字符。

        本文以CU用户名为crypto_user为例,您可以根据业务需要自主命名。

        重要

        如果您是配置KMS硬件密钥管理实例的密码机集群,CU用户名请使用kmsuser

        createUser CU crypto_user <enter password>
      2. 执行listUsers命令,查看CU是否已经创建成功。

        预期输出:

        cloudmgmt>listUsers
        Users on server 0(172.16.XX.XX):
        Number of users found:3
        
            User Id         User Type       User Name                  MofnPubKey    LoginFailureCnt         2FA
                 1          CO          admin                                    NO               0               NO
                 2          AU          app_user                                 NO               0               NO
                 3          CU          crypto_user                              NO               0               NO

      步骤7:验证主密码机状态

      返回到加密服务控制台,在激活集群页面单击update图标刷新密码机状态,然后单击下一步

  4. ③添加加密机页面,根据提示将子密码机添加到集群,然后单击完成

    如果需要更多的密码机实例,您需要购买密码机实例,并将密码机实例添加到集群。

步骤三:启动HSM客户端(hsm_proxy)

  1. 修改HSM客户端配置文件。

    在密码机管理工具的安装目录下,找到/opt/hsm/etc/hsm_proxy.cfg文件,修改server.hostname为当前实例所属VPCIP地址,client.e2e_owner_crt_pathissuerCA.crt的文件路径。

    说明

    issuerCA.crt即您在激活集群的过程中创建的自签名证书。具体信息,请参见步骤二:创建并激活集群

    {
    
        "ssl": {
            "certificate": "/opt/hsm/etc/client.crt",
            "pkey": "/opt/hsm/etc/client.key",
            "CApath": "/opt/hsm/etc/certs",
            "server_ssl": "yes",
            "server_ch_ssl_ciphers": "default"
        },
    
        "client": {
            "socket_type" : "UNIXSOCKET",
            "tcp_port" : 1111,
            "zoneid" : 0,
            "workers" : 1,
            "daemon_id" : 1,
            "reconnect_attempts": -1,
            "reconnect_interval": 1,
            "log_level": "INFO",
            "sslreneg": 0,
            "CriticalAlertScript": "",
            "e2e_owner_crt_path" : "<issuerCA.crt file path>",
            "create_object_minimum_nodes" : 1,
            "logfiles_location" : ""
        },
    
        "loadbalance" : {
            "enable" : "yes",
            "prefer_same_zone": "no",
            "success_rate_weight" : 1,
            "relative_idleness_weight" : 1
        },
    
        "dualfactor": {
            "enable" : "no",
            "port" : 2225,
            "certificate" : "certificate.crt",
            "pkey" : "pkey.pem",
            "dualfactor_ssl": "yes",
            "dualfactor_ch_ssl_ciphers": "default"
        },
    
        "server": {
            "hostname": "<instance ip>",
            "port": 2224
        }
    }
  2. 启动HSM客户端(hsm_proxy),并设置日志文件路径。

    本文以将日志保存到liquidSecurity.1.WKCrty.log为例。

    /opt/hsm/bin/hsm_proxy /opt/hsm/etc/hsm_proxy.cfg
    
    logfiles_location is not specified, logs will be available in current directory
    
    Logs will be available in liquidSecurity.1.WKCrty.log file
  3. 验证hsm_proxy是否连接成功。

    通过执行tail命令获取hsm_proxy的日志文件,查看hsm_proxy是否连接成功。例如,执行tail liquidSecurity.1.WKCrty.log命令,如果结果中出现e2e_handle_client_request:HSM FIPS STATE 2,表示已连接成功。

    tail liquidSecurity.1.WKCrty.log
    2023-10-28T13:33:05Z liquidSecurity INF: check_preferred_srv_status_noclock: New preferred server node id:0
    2023-10-28T13:33:05Z liquidSecurity INF: do_e2e_encryption_handshake: Trying to login to server as new server connection is established
    2023-10-28T13:33:05Z liquidSecurity INF: e2e_handle_client_request:  Got Authorize session response
    2023-10-28T13:33:05Z liquidSecurity INF: get_partition_info: Get pHSM Info using e2e mgmtch
    2023-10-28T13:33:05Z liquidSecurity INF: e2e_handle_client_request: Authorize session SUCCESS
    2023-10-28T13:33:05Z liquidSecurity INF: e2e_handle_client_request: Got Partition Info
    2023-10-28T13:33:05Z liquidSecurity INF: e2e_handle_client_request: GetPartitionInfo success 0 : HSM Return: SUCCESS
    2023-10-28T13:33:05Z liquidSecurity INF: e2e_handle_client_request: HSM FIPS STATE 2
    2023-10-28T13:33:06Z liquidSecurity INF: libevmulti_init: Initializing events
    2023-10-28T13:33:06Z liquidSecurity INF: libevmulti_init: Ready !

步骤四:创建密钥

说明

如果您是配置KMS硬件密钥管理实例的密码机集群,请跳过本步骤,具体请参见配置KMS硬件密钥管理实例的密码机集群

  1. 启动key_mgmt_tool命令行工具。

    /opt/hsm/bin/key_mgmt_tool
  2. 执行loginHSM命令,以CU身份登录HSM。

    Command:  loginHSM -u CU -s crypto_user -p <enter password>
    
            Cfm3LoginHSM returned: 0x00 : HSM Return: SUCCESS
    
            Cluster Status:
            Node id 0 status: 0x00000000 : HSM Return: SUCCESS
  3. 执行genSymKey命令,生成一个对称密钥。

    Command:  genSymKey -l testkey -t 31 -s 32
    
            Cfm3GenerateSymmetricKey returned: 0x00 : HSM Return: SUCCESS
    
            Symmetric Key Created.  Key Handle: 6
    
            Cluster Status:
            Node id 0 status: 0x00000000 : HSM Return: SUCCESS
  4. 执行findKey命令,查询您创建的密钥。

    Command:  findKey
    
            Total number of keys present: 1
    
            Number of matching keys from start index 0::0
    
            Handles of matching keys:
            6
    
            Cluster Status:
            Node id 0 status: 0x00000000 : HSM Return: SUCCESS
    
            Cfm3FindKey returned: 0x00 : HSM Return: SUCCESS
                            
  5. 执行exit命令,退出key_mgmt_tool命令行工具。

    Command:  exit

步骤五:使用密码机实例集群进行加密解密

说明

如果您是配置KMS硬件密钥管理实例的密码机集群,请跳过本步骤,具体请参见配置KMS硬件密钥管理实例的密码机集群

您可以通过OpenSSL引擎、JCEPKCS#11库提供的接口使用密码机集群。更多信息,请参见OpenSSL动态引擎JCEPKCS #11

相关文档

如果您需要扩展集群、移除集群、修改集群名称或访问白名单,请参见创建GVSM(NIST FIPS)密码机集群