证书管理开发指导

在这里插入图片描述
在这里插入图片描述


说明
本开发指导需使用API version 11及以上版本SDK。

场景说明

  1. 典型场景:
  • 安装应用证书和私有凭据。

  • 获取应用证书和私有凭据。

  • 使用应用证书和私有凭据对数据进行签名、验签。

  • 卸载指定的应用证书和私有凭据。

  1. 支持安装的私有凭据算法类型&签名验签支持的参数组合。

证书管理安装凭据及使用凭据中的密钥进行签名、验签,依赖通用密钥库(HUKS)能力,证书管理支持的算法为其子集,当前仅支持RSA及ECC算法类型的私有凭据安装及使用。签名、验签支持的参数组合,详见HUKS声明的签名/验签介绍及算法规格中RSA及ECC的描述。

接口说明

详细接口说明可参考API参考。

以上场景涉及的常用接口如下表所示:

实例名接口名描述
certificateManagerinstallPrivateCertificate(keystore: Uint8Array, keystorePwd: string, certAlias: string, callback: AsyncCallback) : void使用callback方式安装应用私有凭据
certificateManagerinstallPrivateCertificate(keystore: Uint8Array, keystorePwd: string, certAlias: string) : Promise使用promise方式安装应用私有凭据
certificateManagergetPrivateCertificate(keyUri: string, callback: AsyncCallback) : void使用callback方式获取应用私有凭据
certificateManagergetPrivateCertificate(keyUri: string) : Promise使用promise方式获取应用私有凭据
certificateManageruninstallPrivateCertificate(keyUri: string, callback: AsyncCallback) : void使用callback方式卸载应用私有凭据
certificateManageruninstallPrivateCertificate(keyUri: string) : Promise使用promise方式卸载应用私有凭据
certificateManagerinit(authUri: string, spec: CMSignatureSpec, callback: AsyncCallback) : void使用callback方式进行签名验签的初始化操作
certificateManagerinit(authUri: string, spec: CMSignatureSpec) : Promise使用promise方式进行签名验签的初始化操作
certificateManagerupdate(handle: Uint8Array, data: Uint8Array, callback: AsyncCallback) : void使用callback方式对待签名、验签的数据进行更新操作
certificateManagerupdate(handle: Uint8Array, data: Uint8Array) : Promise使用promise方式对待签名、验签的数据进行更新操作
certificateManagerfinish(handle: Uint8Array, callback: AsyncCallback) : void使用callback方式完成数据的签名操作
certificateManagerfinish(handle: Uint8Array, signature: Uint8Array, callback: AsyncCallback) : void使用callback方式完成数据的签名操作
certificateManagerfinish(handle: Uint8Array, signature?: Uint8Array) : Promise使用promise方式完成数据的签名、验签操作
certificateManagerabort(handle: Uint8Array, callback: AsyncCallback) : void使用callback方式中止签名、验证操作
certificateManagerabort(handle: Uint8Array) : Promise使用promise方式中止签名、验证操作

开发步骤

  1. 申请权限。调用证书管理相关接口,需要在module.json5文件的requestPermissions对象中配置ohos.permission.ACCESS_CERT_MANAGER权限。更多配置信息请参考Stage模型应用程序包结构。

  2. 导入相关模块。

import { certificateManager } from '@kit.DeviceCertificateKit';
import { BusinessError } from '@kit.BasicServicesKit';
  1. 安装应用私有凭据,获取应用私有凭据,并使用应用私有凭据进行签名、验签,最后删除应用私有凭据。
async function certificateManagerSample() {
  /* 安装的凭据数据需要业务赋值,本例数据非凭据数据 */
  let keystore: Uint8Array = new Uint8Array([
    0x30, 0x82, 0x04, 0x6a, 0x02, 0x01,
  ]);

  /* 安装凭据对应的密码,业务赋值 */
  let keystorePwd: string = '123456';
  let appKeyUri: string = '';
  try {
    /* 安装私有凭据 */
    const res: certificateManager.CMResult = await certificateManager.installPrivateCertificate(keystore, keystorePwd, "testPriCredential");
    appKeyUri = (res.uri != undefined) ? res.uri : '';
  } catch (err) {
    let e: BusinessError = err as BusinessError;
    console.error(`Failed to install private certificate. Code: ${e.code}, message: ${e.message}`);
  }

  try {
    /* srcData为待签名、验签的数据,业务自行赋值 */
    let srcData: Uint8Array = new Uint8Array([
      0x86, 0xf7, 0x0d, 0x01, 0x07, 0x01,
  ]);

    /* 构造签名的属性参数 */
    const signSpec: certificateManager.CMSignatureSpec = {
      purpose: certificateManager.CmKeyPurpose.CM_KEY_PURPOSE_SIGN,
      padding: certificateManager.CmKeyPadding.CM_PADDING_PSS,
      digest: certificateManager.CmKeyDigest.CM_DIGEST_SHA256
    };

    /* 签名 */
    const signHandle: certificateManager.CMHandle = await certificateManager.init(appKeyUri, signSpec);
    await certificateManager.update(signHandle.handle, srcData);
    const signResult: certificateManager.CMResult = await certificateManager.finish(signHandle.handle);

    /* 构造验签的的属性参数 */
    const verifySpec: certificateManager.CMSignatureSpec = {
      purpose: certificateManager.CmKeyPurpose.CM_KEY_PURPOSE_VERIFY,
      padding: certificateManager.CmKeyPadding.CM_PADDING_PSS,
      digest: certificateManager.CmKeyDigest.CM_DIGEST_SHA256
    };

    /* 验签 */
    const verifyHandle: certificateManager.CMHandle = await certificateManager.init(appKeyUri, verifySpec);
    await certificateManager.update(verifyHandle.handle, srcData);
    const verifyResult = await certificateManager.finish(verifyHandle.handle, signResult.outData);
    console.info('Succeeded in signing and verifying.');
  } catch (err) {
    let e: BusinessError = err as BusinessError;
    console.error(`Failed to sign or verify. Code: ${e.code}, message: ${e.message}`);
  }

  try {
    /* 卸载私有凭据 */
    await certificateManager.uninstallPrivateCertificate(appKeyUri);
  } catch (err) {
    let e: BusinessError = err as BusinessError;
    console.error(`Failed to uninstall private certificate. Code: ${e.code}, message: ${e.message}`);
  }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RZer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值