实例管理

购买实例

租户通过本功能完成对服务实例的创建、维护和管理。

菜单路径

产品与服务 → 安全(云御) → 云加密机 CHSM → 服务列表 →点击购买云加密机

操作步骤

1、 登录控制台。

2、 点击 产品与服务 → 安全(云御) → 云加密机 CHSM → 服务列表,进入实例操作界面。

3、 点击"购买云加密机",填写基本信息。 如表 1 所示。

属性 属性说明
服务名称 服务实例的名称。名称只能包含中文、数字、字母和"-",长度不超过 36。
计费模式 包年/包月:包年包月是预付费模式,按订单的购买周期计费,适用于可预估资源使用周期的场景。
区域 不同区域之间内网互不相通,请就近选择靠近您业务的区域,可减少网络延时,提高访问速度。
选择产品 选择已经定义好的产品
选择规格 选择对应产品下的规格
时长 选择购买服务实例的时长

4、 确认无误后,点击"立即购买",进入订单确认页, 支付成功后即完成一个云加密机的购买 。

续费

操作步骤

1、 登录控制台。

2、 点击 产品与服务 → 安全(云御) → 云加密机 CHSM → 服务列表,进入实例操作界面。

3、 在需要续费的实例的操作栏中,选择"续费",跳转到续费订单界面。

4、 选择续费的时长,点击"去支付"。

5、 支付成功,完成续费。

扩容

操作步骤

1、 登录控制台。

2、 点击 产品与服务 → 安全(云御) → 云加密机 CHSM → 服务列表,进入实例操作界面。

3、 在需要扩容的实例的操作栏中,选择"扩容",弹出扩容弹窗选择需要扩容梳理,跳转到续费订单界面。

4、 点击"去支付"。

5、 支付成功,完成扩容。

管理实例

操作步骤

1、 登录控制台。

2、 点击 产品与服务 → 安全(云御) → 云加密机 CHSM → 服务列表,进入实例操作界面。

3、 管理单个实例:在右侧操作栏中,单击"管理",即可登录到实例管理界面进行操作。

实例详情

操作步骤

1、 登录控制台。

2、 点击 产品与服务 → 安全(云御) → 云加密机 CHSM → 服务列表,进入实例操作界面。

3、 点击需要查看详情的实例 ID 进入 。

搜索实例

操作步骤

1、 登录控制台

2、 点击 产品与服务 → 安全(云御) → 云加密机 CHSM → 服务列表,进入实例操作界面。

3、 在上方的搜索框中输入要搜索的实例的名称、ID 或内网 IP,点击"搜索"按钮

系统登录

单点登录

具有 admin 权限的云平台用户,可通过实例的单点登录功能登录云加密机,登录后创建资产、用户和控制策略,操作步骤如下:

  1. 登录控制台。

  2. 点击 产品与服务 → 安全(云御) → 云加密机 → 服务列表,进入实例操作界面。

  3. 管理单个实例:在右侧操作栏中,单击"管理",即可登录到实例管理界面进行操作。

加密服务

管理员成功登录CHSM系统后,可以进行密钥的管理,然后调用加密/解密服务。
CHSM具体操作方法如下:
下面以敏感数据加解密场景为例,介绍使用方法。
步骤1:登录云加密机后,应用创建sessionKey对象
步骤2:调用setKeyId方法传入对称密钥名
步骤3:调用加密接口
步骤4:返回加密密文
步骤5:使用加密相同的sessionKey对象
步骤6:调用解密接口
步骤7:返回解密原文

查看监控

管理员可以首页查看当前设备状态、服务状态和应用信息。 设备信息:根据客户购买的服务产品,显示当前的产品运行状态、产品的IP和端口号信息; 服务信息:根据客户已配置的服务实例信息; 其他:展示用户连续运行时间和应用、设备当前状态和数量等信息;

应用管理

CHSM支持对用户对已购买产品进行应用配置。登录CHSM后,选择菜单应用管理>我的应用,可以完成对应用进行的添加、编辑、删除等操作。

密钥管理

应用密钥:登录CHSM后,选择菜单密钥管理>应用密钥,可以对应用密钥进行创建、更新、恢复、注销、归档等操作,密钥可支持对称和非对称两种加密方式中主流加解密算法;

历史应用密钥:用户可以查看已经使用过的应用密钥,可以对历史密钥进行恢复、归档和销毁。

应用场景实例

敏感信息加密流程

生成密钥

在应用密钥列表中选择创建应用密钥。

填写密钥名称选择要使用的应用、设备组、密钥类型以及密钥模板信息完成密钥的创建。

配置Java-SDK接口

可以通过文件形式配置Java接口。 在SDK的jar包文件中配置swsds.ini

| #SWXA密码设备接口配置文件
[Device]
device = hsm
[ErrorLog]
level=2
logfile=swsds.log
maxsize=10
[HSM1]
ip=10.0.68.50
port=8208
[Timeout]
connect=10
service=30
[ConnectionPool]
PoolSize=1
protocol=thrift |

文件配置要求

分类 要求 说明
注释 注释行以符号“#”起始,不支持行内注释。 #内容形式中的属性字段与文件形式中的属性字段保持一致。
配置域 配置域以方括号“[”和“]”标识。
配置域 配置项格式:“键名(Key)=键值(Value)”。
配置域 支持使用空白字符(空格或制表符)等对内容进行对齐操作。

配置说明

属性分类 配置域 属性字段 属性字段说明
设备属性 [Device] device 设备类型
日志属性 [ErrorLog] level 日志级别
日志属性 [ErrorLog] logfile 日志文件
密码机属性 [HSM1] ip
密码机属性 [HSM1] port
超时属性 [Timeout] connect 连接数
超时属性 [Timeout] service 服务个数
连接池属性 [ConnectionPool] PoolSize 连接池大小
Protocol 连接池协议

初始化SDK接口对象

使用以下方法初始化SDK接口对象,调用该方法后,会根据接口配置文件初始化SDK接口,创建接口对象crypto;

SDFCrypto crypto = SDFFactory.getInstance();

登录认证

调用crypto接口对象的登录认证接口进行登录认证;

crypto. CCSP_LoginbyAppNameAndPwd (appName, password)

返回值说明

无返回值。

抛出异常

com.ccsp.device.crypto.CryptoException//接口自定义异常

接口定义

  • 使用应用名称和口令登录认证

  • @param appName 应用名称

  • @param passwd 应用连接口令

  • @throws CryptoException 失败抛出异常

    public void CCSP_LoginbyAppNameAndPwd(String appName,String passwd) throws CryptoException;
    

请求参数

参数名称 参数类型 参数描述
appName String 配置文件路径
passwd String 返回的服务句柄

请求示例

try {
            crypto.CCSP_LoginbyAppNameAndPwd(appName, password);
        } catch (CryptoException e) {
            e.printStackTrace();
        }

调用加密接口进行数据加密

调用以下crypto接口对象的以下接口进行数据加密;

crypto.CCSP_Encrypt(skc2, algoId, null, inputData)

返回值说明

返回密文数据。

抛出异常

com.ccsp.device.crypto.CryptoException//接口自定义异常

接口定义

  • /**
    
    * 对称密钥加密
    * @param  keyContext 会话密钥对象
    * @param  algID   加密算法标识
    * @param  iv      初始向量
    * @param  inData   输入数据
    * @return byte[]   返回密文数据
    * @throws CryptoException 失败抛出异常
      */
      byte[] CCSP_Encrypt(SessionKeyContext keyContext,
      int algID,
              byte[] iv,
              byte[] inData)
       throws com.ccsp.device.crypto.CryptoException
    

请求参数

参数名称 参数类型 参数描述
keyContext SessionKeyContext 会话密钥对象
algID int 加密算法标识
iv byte[] 初始向量(根据算法类型对应一个分组长度)
inData byte[] 输入数据(密钥长度的倍数)

请求示例

try {
        String keyid = InUtil.getSymmetryKey(algoId);
        SessionKeyContext skc = crypto.CCSP_GenerateKeyWithKEK(keyid, algoId, 128);            
        byte[] inputData = new byte[10240];
        new Random().nextBytes(inputData);
                byte[] encrydata = crypto.CCSP_Encrypt(skc, algoId, null, inputData);//传入由selfkey加密得到的外部密钥    

} catch (CryptoException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
}

示例

static SDFCrypto crypto;
    public static void main(String[] args) {
        try {
            crypto = SDFFactory.getInstance();
            boolean auth = TestCCSPAuthFunc.Authfunc(crypto);
            if(!auth) {
                return;
            }
        } catch (CryptoException e) {
            e.printStackTrace();
        }

try {
        String keyid = InUtil.getSymmetryKey(algoId);
            //外部对称密钥加解密测试    GenerateKeyWithKEK
    SessionKeyContext skc = crypto.CCSP_GenerateKeyWithKEK(keyid, algoId, 128);
    byte[] inputData = new byte[10240];
    new Random().nextBytes(inputData);

​            byte[] encrydata = crypto.CCSP_Encrypt(skc, algoId, null, inputData);//传入由selfkey加密得到的外部密钥
​            System.out.println("encrypt result:");
​            String str = PrintUtil.toHexString(encrydata);
​            System.out.println(str);
​            System.out.println(" ");
​            byte[] decrydata = crypto.CCSP_Decrypt(skc, algoId, null, encrydata);
​            str = PrintUtil.toHexString(decrydata);
​            System.out.println(str);
​            if(Arrays.equals(inputData, decrydata)){
​                System.out.println(" 解密正确!!!!!");
​            }else {
​                System.out.println(" 解密错误!!!!!");
​            }
​            System.out.println("\n------------------------------------------------------------");
​                    
​            //内部对称密钥加解密测试
​            SessionKeyContext skc2 = new SessionKeyContext();
            skc2.setKeyID(keyid.getBytes());
            encrydata = crypto.CCSP_Encrypt(skc2, algoId, null, inputData);//传入内部密钥的keyid
            System.out.println("encrypt result:");
            str = PrintUtil.toHexString(encrydata);
            System.out.println(str);
            System.out.println(" ");
            decrydata = crypto.CCSP_Decrypt(skc2, algoId, null, encrydata);
            str = PrintUtil.toHexString(decrydata);
            System.out.println(str);

            if(Arrays.equals(inputData, decrydata)){
                System.out.println(" 解密正确!!!!!");
            }else {
                System.out.println(" 解密错误!!!!!");
            }
            System.out.println("\n------------------------------------------------------------");

            //外部对称密钥加解密测试    ImportKeyWithKEK
            SessionKeyContext skc3 = crypto.CCSP_ImportKeyWithKEK(keyid, algoId, skc.getEncryptedSessionKey());
            encrydata = crypto.CCSP_Encrypt(skc3, algoId, null, inputData);//传入由selfkey加密得到的外部密钥
            System.out.println("encrypt result:");
            str = PrintUtil.toHexString(encrydata);
            System.out.println(str);
            System.out.println(" ");
            decrydata = crypto.CCSP_Decrypt(skc3, algoId, null, encrydata);
            str = PrintUtil.toHexString(decrydata);
            System.out.println(str);

            if(Arrays.equals(inputData, decrydata)){
                System.out.println(" 解密正确!!!!!");
            }else {
                System.out.println(" 解密错误!!!!!");
            }

        } catch (CryptoException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }