实例管理
购买实例
租户通过本功能完成对服务实例的创建、维护和管理。
菜单路径
产品与服务 → 安全(云御) → 云加密机 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 权限的云平台用户,可通过实例的单点登录功能登录云加密机,登录后创建资产、用户和控制策略,操作步骤如下:
登录控制台。
点击 产品与服务 → 安全(云御) → 云加密机 → 服务列表,进入实例操作界面。
管理单个实例:在右侧操作栏中,单击"管理",即可登录到实例管理界面进行操作。
加密服务
管理员成功登录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();
}