diff --git a/zh-cn/application-dev/reference/apis/js-apis-cert.md b/zh-cn/application-dev/reference/apis/js-apis-cert.md new file mode 100755 index 0000000000000000000000000000000000000000..0bdd3e85444e9406d0f7498b660bb40a61f77984 --- /dev/null +++ b/zh-cn/application-dev/reference/apis/js-apis-cert.md @@ -0,0 +1,2109 @@ +# 证书模块 + +crypto framework提供证书相关接口。其中,依赖加解密算法库框架的基础算法能力的部分,详细接口说明可参考[cryptoFramework API参考](./js-apis-cryptoFramework.md)。 + +> **说明:** +> +> 本模块首批接口从API version 9开始支持。 + +## 导入模块 + +```javascript +import cryptoCert from '@ohos.security.cert'; +import cryptoFramework from "@ohos.security.cryptoFramework" +``` + +## CertResult + + 表示执行结果的枚举。 + + **系统能力:** SystemCapability.Security.Cert + +| 名称 | 值 | 说明 | +| --------------------------------------| -------- | -----------------------------| +| INVALID_PARAMS | 401 | 非法入参。 | +| NOT_SUPPORT | 801 | 操作不支持。 | +| ERR_OUT_OF_MEMORY | 19020001 | 内存错误。 | +| ERR_RUNTIME_ERROR | 19020002 | 运行时外部错误。 | +| ERR_CRYPTO_OPERATION | 19030001 | 调用三方算法库API出错。 | +| ERR_CERT_SIGNATURE_FAILURE | 19030002 | 证书签名验证错误。 | +| ERR_CERT_NOT_YET_VALID | 19030003 | 证书尚未生效。 | +| ERR_CERT_HAS_EXPIRED | 19030004 | 证书过期。 | +| ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY | 19030005 | 无法获取证书的颁发者。 | +| ERR_KEYUSAGE_NO_CERTSIGN | 19030006 | 证书的秘钥用途不含证书签名。 | +| ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE | 19030007 | 证书的秘钥用途不含数字签名。 | + +## DataBlob +buffer数组。 + **系统能力:** SystemCapability.Security.Cert +| 名称 | 类型 | 可读 | 可写 | 说明 | +| -------------- | -------------- | ---- | ---- | ----------------| +| data | Uint8Array | 是 | 是 | 数据。 | + +## DataArray + +buffer数组的列表。 + **系统能力:** SystemCapability.Security.Cert +| 名称 | 类型 | 可读 | 可写 | 说明 | +| -------------- | -------------- | ---- | ---- | ----------------| +| data | Uint8Array | 是 | 是 | 数据列表。 | + +## EncodingFormat + + 表示证书编码格式的枚举。 + + **系统能力:** SystemCapability.Security.Cert + +| 名称 | 值 | 说明 | +| ---------- | ------ | --------- | +| FORMAT_DER | 0 | DER格式。 | +| FORMAT_PEM | 1 | PEM格式。 | + + +## EncodingBlob + +带编码格式的证书二进制数组。 + +### 属性 + +**系统能力:** SystemCapability.Security.Cert + +| 名称 | 类型 | 可读 | 可写 | 说明 | +| -------------- | --------------------------------- | ---- | ---- | ------------------------------ | +| data | Uint8Array | 是 | 是 | 传入的证书数据。 | +| encodingFormat | [EncodingFormat](#encodingformat) | 是 | 是 | 指明证书编码格式。 | + + +## CertChainData + +证书链数据,在证书链校验时,作为入参传入。 + +### 属性 + +**系统能力:** SystemCapability.Security.Cert + +| 名称 | 类型 | 可读 | 可写 | 说明 | +| -------------- | --------------------------------- | ---- | ---- | ------------------------------------------------------------ | +| data | Uint8Array | 是 | 是 | 证书数据,按照长度(2字节)-数据的形式传入,如:08ABCDEFGH07ABCDEFG,第一本证书,前2个字节表示证书的长度为8字节,后面附加8字节的证书数据;第2本证书前2个字节表示证书的长度为7字节,后面附加7字节的证书数据。 | +| count | number | 是 | 是 | 传入的数据中,包含的证书数量。 | +| encodingFormat | [EncodingFormat](#encodingformat) | 是 | 是 | 指明证书编码格式。 | + + +## cryptoCert.createX509Cert + +createX509Cert(inStream : EncodingBlob, callback : AsyncCallback\) : void + +表示创建X509证书对象。 + +**系统能力:** SystemCapability.Security.Cert + +**参数:** + +| 参数名 | 类型 | 必填 | 说明 | +| -------- | ----------------------------- | ---- | -------------------------- | +| inStream | [EncodingBlob](#encodingblob) | 是 | X509证书序列化数据 | +| callback | AsyncCallback\ | 是 | 回调函数。表示X509证书对象 | + + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +// 证书二进制数据,需业务自行赋值 +let encodingData = null; +let encodingBlob = { + data: encodingData, + // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER + encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM +}; +cryptoCert.createX509Cert(encodingBlob, function (error, x509Cert) { + if (error != null) { + console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); + } else { + console.log("createX509Cert success"); + } +}); +``` + +## cryptoCert.createX509Cert + +createX509Cert(inStream : EncodingBlob) : Promise\ + +表示创建X509证书对象。 + +**系统能力:** SystemCapability.Security.Cert + +**参数:** + +| 参数名 | 类型 | 必填 | 说明 | +| -------- | ----------------------------- | ---- | ------------------ | +| inStream | [EncodingBlob](#encodingblob) | 是 | X509证书序列化数据 | + +**返回值:** + +| 类型 | 说明 | +| ------- | ---------------- | +| Promise\ | 表示X509证书对象 | + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +// 证书二进制数据,需业务自行赋值 +let encodingData = null; +let encodingBlob = { + data: encodingData, + // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM +}; +cryptoCert.createX509Cert(encodingBlob).then(x509Cert => { + console.log("createX509Cert success"); +}, error => { + console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); +}); +``` + +## X509Cert + +X509证书类。 + +### verify + +verify(key : cryptoFramework.PubKey, callback : AsyncCallback\) : void + +表示对证书验签。 + +**系统能力:** SystemCapability.Security.Cert + +**参数:** + +| 参数名 | 类型 | 必填 | 说明 | +| -------- | --------------------- | ---- | ------------------------------------------------------------ | +| key | cryptoFramework.PubKey | 是 | 用于验签的公钥对象 | +| callback | AsyncCallback\ | 是 | 回调函数。使用AsyncCallback的第一个error参数判断是否验签成功,error为null表示成功,不为null表示失败 | + + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; +import cryptoFramework from "@ohos.security.cryptoFramework" + +// 证书二进制数据,需业务自行赋值 +let encodingData = null; +let encodingBlob = { + data: encodingData, + // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM +}; +cryptoCert.createX509Cert(encodingBlob, function (error, x509Cert) { + if (error != null) { + console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); + } else { + console.log("createX509Cert success"); + // 业务需通过AsyKeyGenerator生成PubKey或通过上级X509Cert证书对象的getPublicKey获取PubKey + let pubKey = null; + x509Cert.verify(pubKey, function (error, data) { + if (error != null) { + console.log("verify failed, errCode: " + error.code + ", errMsg: " + error.message); + } else { + console.log("verify success"); + } + }); + } +}); +``` + +### verify + +verify(key : cryptoFramework.PubKey) : Promise\ + +表示对证书验签。 + +**系统能力:** SystemCapability.Security.Cert + +**参数:** + +| 参数名 | 类型 | 必填 | 说明 | +| ------ | ------ | ---- | ------------------ | +| key | cryptoFramework.PubKey | 是 | 用于验签的公钥对象 | + +**返回值:** + +| 类型 | 说明 | +| -------------- | ----------- | +| Promise\ | Promise对象 | + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +// 证书二进制数据,需业务自行赋值 +let encodingData = null; +let encodingBlob = { + data: encodingData, + // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM +}; +cryptoCert.createX509Cert(encodingBlob).then(x509Cert => { + console.log("createX509Cert success"); + // 业务需通过AsyKeyGenerator生成PubKey或通过上级X509Cert证书对象的getPublicKey获取PubKey + let pubKey = null; + x509Cert.verify(pubKey).then(result => { + console.log("verify success"); + }, error => { + console.log("verify failed, errCode: " + error.code + ", errMsg: " + error.message); + }); +}, error => { + console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); +}); +``` + +### getEncoded + +getEncoded(callback : AsyncCallback\) : void + +表示获取X509证书序列化数据。 + +**系统能力:** SystemCapability.Security.Cert + +**参数**: + +| 参数名 | 类型 | 必填 | 说明 | +| -------- | --------------------------------------------- | ---- | -------------------------------- | +| callback | AsyncCallback\<[EncodingBlob](#encodingblob)> | 是 | 回调函数。表示X509证书序列化数据 | + + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +// 证书二进制数据,需业务自行赋值 +let encodingData = null; +let encodingBlob = { + data: encodingData, + // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM +}; +cryptoCert.createX509Cert(encodingBlob, function (error, x509Cert) { + if (error != null) { + console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); + } else { + console.log("createX509Cert success"); + x509Cert.getEncoded(function (error, data) { + if (error != null) { + console.log("getEncoded failed, errCode: " + error.code + ", errMsg: " + error.message); + } else { + console.log("getEncoded success"); + } + }); + } +}); +``` + +### getEncoded + +getEncoded() : Promise\ + +表示获取X509证书序列化数据。 + +**系统能力:** SystemCapability.Security.Cert + +**返回值**: + +| 类型 | 说明 | +| --------------------------------------- | ---------------------- | +| Promise\<[EncodingBlob](#encodingblob)> | 表示X509证书序列化数据 | + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +// 证书二进制数据,需业务自行赋值 +let encodingData = null; +let encodingBlob = { + data: encodingData, + // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM +}; +cryptoCert.createX509Cert(encodingBlob).then(x509Cert => { + console.log("createX509Cert success"); + x509Cert.getEncoded().then(result => { + console.log("getEncoded success"); + }, error => { + console.log("getEncoded failed, errCode: " + error.code + ", errMsg: " + error.message); + }); +}, error => { + console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); +}); +``` + +### getPublicKey + +getPublicKey() : cryptoFramework.PubKey + +表示获取X509证书公钥。 + +**系统能力:** SystemCapability.Security.Cert + +**返回值**: + +| 类型 | 说明 | +| ------ | ---------------- | +| cryptoFramework.PubKey | X509证书公钥对象 | + + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; +import cryptoFramework from "@ohos.security.cryptoFramework" + +// 证书二进制数据,需业务自行赋值 +let encodingData = null; +let encodingBlob = { + data: encodingData, + // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM +}; +cryptoCert.createX509Cert(encodingBlob, function (error, x509Cert) { + if (error != null) { + console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); + } else { + console.log("createX509Cert success"); + let pubKey = null; + try { + pubKey = x509Cert.getPublicKey(); + } catch (error) { + console.log("getPublicKey failed, errCode: " + error.code + ", errMsg: " + error.message); + } + } +}); +``` + +### checkValidityWithDate + +checkValidityWithDate(date: string) : void + +表示检查X509证书有效期。 + +**系统能力:** SystemCapability.Security.Cert + +**参数**: + +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------------- | ---- | ---------- | +| date | string | 是 | 日期 | + + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +// 证书二进制数据,需业务自行赋值 +let encodingData = null; +let encodingBlob = { + data: encodingData, + // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM +}; +cryptoCert.createX509Cert(encodingBlob, function (error, x509Cert) { + if (error != null) { + console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); + } else { + console.log("createX509Cert success"); + let date = "150527000001Z"; + + // 校验证书有效期 + try { + x509Cert.checkValidityWithDate(date); + } catch (error) { + console.log("checkValidityWithDate failed, errCode: " + error.code + ", errMsg: " + error.message); + } + } +}); +``` + +### getVersion + +getVersion() : number + +表示获取X509证书版本。 + +**系统能力:** SystemCapability.Security.Cert + +**返回值**: + +| 类型 | 说明 | +| ------ | ---------------- | +| number | 表示X509证书版本 | + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +// 证书二进制数据,需业务自行赋值 +let encodingData = null; +let encodingBlob = { + data: encodingData, + // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM +}; +cryptoCert.createX509Cert(encodingBlob, function (error, x509Cert) { + if (error != null) { + console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); + } else { + console.log("createX509Cert success"); + let version = x509Cert.getVersion(); + } +}); +``` + +### getSerialNumber + +getSerialNumber() : number + +表示获取X509证书序列号。 + +**系统能力:** SystemCapability.Security.Cert + +**返回值**: + +| 类型 | 说明 | +| ------ | ------------------ | +| number | 表示X509证书序列号 | + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +// 证书二进制数据,需业务自行赋值 +let encodingData = null; +let encodingBlob = { + data: encodingData, + // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM +}; +cryptoCert.createX509Cert(encodingBlob, function (error, x509Cert) { + if (error != null) { + console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); + } else { + console.log("createX509Cert success"); + let serialNumber = x509Cert.getSerialNumber(); + } +}); +``` + +### getIssuerName + +getIssuerName() : DataBlob + +表示获取X509证书颁发者名称。 + +**系统能力:** SystemCapability.Security.Cert + +**返回值**: + +| 类型 | 说明 | +| --------------------- | ---------------------- | +| [DataBlob](#datablob) | 表示X509证书颁发者名称 | + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +// 证书二进制数据,需业务自行赋值 +let encodingData = null; +let encodingBlob = { + data: encodingData, + // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM +}; +cryptoCert.createX509Cert(encodingBlob, function (error, x509Cert) { + if (error != null) { + console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); + } else { + console.log("createX509Cert success"); + let issuerName = x509Cert.getIssuerName(); + } +}); +``` + +### getSubjectName + +getSubjectName() : DataBlob + +表示获取X509证书主体名称。 + +**系统能力:** SystemCapability.Security.Cert + +**返回值**: + +| 类型 | 说明 | +| --------------------- | -------------------- | +| [DataBlob](#datablob) | 表示X509证书主体名称 | + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +// 证书二进制数据,需业务自行赋值 +let encodingData = null; +let encodingBlob = { + data: encodingData, + // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM +}; +cryptoCert.createX509Cert(encodingBlob, function (error, x509Cert) { + if (error != null) { + console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); + } else { + console.log("createX509Cert success"); + let subjectName = x509Cert.getSubjectName(); + } +}); +``` + +### getNotBeforeTime + +getNotBeforeTime() : string + +表示获取X509证书有效期起始时间。 + +**系统能力:** SystemCapability.Security.Cert + +**返回值**: + +| 类型 | 说明 | +| ------ | -------------------------- | +| string | 表示X509证书有效期起始时间 | + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +// 证书二进制数据,需业务自行赋值 +let encodingData = null; +let encodingBlob = { + data: encodingData, + // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM +}; +cryptoCert.createX509Cert(encodingBlob, function (error, x509Cert) { + if (error != null) { + console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); + } else { + console.log("createX509Cert success"); + let notBefore = x509Cert.getNotBeforeTime(); + } +}); +``` + +### getNotAfterTime + +getNotAfterTime() : string + +表示获取X509证书有效期截止时间。 + +**系统能力:** SystemCapability.Security.Cert + +**返回值**: + +| 类型 | 说明 | +| ------ | -------------------------- | +| string | 表示X509证书有效期截止时间 | + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +// 证书二进制数据,需业务自行赋值 +let encodingData = null; +let encodingBlob = { + data: encodingData, + // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM +}; +cryptoCert.createX509Cert(encodingBlob, function (error, x509Cert) { + if (error != null) { + console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); + } else { + console.log("createX509Cert success"); + let notAfter = x509Cert.getNotAfterTime(); + } +}); +``` + +### getSignature + +getSignature() : DataBlob + +表示获取X509证书签名数据。 + +**系统能力:** SystemCapability.Security.Cert + +**返回值**: + +| 类型 | 说明 | +| --------------------- | -------------------- | +| [DataBlob](#datablob) | 表示X509证书签名数据 | + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +// 证书二进制数据,需业务自行赋值 +let encodingData = null; +let encodingBlob = { + data: encodingData, + // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM +}; +cryptoCert.createX509Cert(encodingBlob, function (error, x509Cert) { + if (error != null) { + console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); + } else { + console.log("createX509Cert success"); + let signature = x509Cert.getSignature(); + } +}); +``` + +### getSignatureAlgName + +getSignatureAlgName() : string + +表示获取X509证书签名算法名称。 + +**系统能力:** SystemCapability.Security.Cert + +**返回值**: + +| 类型 | 说明 | +| ------ | ------------------------ | +| string | 表示X509证书签名算法名称 | + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +// 证书二进制数据,需业务自行赋值 +let encodingData = null; +let encodingBlob = { + data: encodingData, + // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM +}; +cryptoCert.createX509Cert(encodingBlob, function (error, x509Cert) { + if (error != null) { + console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); + } else { + console.log("createX509Cert success"); + let sigAlgName = x509Cert.getSignatureAlgName(); + } +}); +``` + +### getSignatureAlgOid + +getSignatureAlgOid() : string + +表示获取X509证书签名算法的对象标志符OID(Object Identifier)。OID是由国际标准组织(ISO)的名称注册机构分配。 + +**系统能力:** SystemCapability.Security.Cert + +**返回值**: + +| 类型 | 说明 | +| ------ | --------------------------------- | +| string | 表示X509证书签名算法对象标志符OID | + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +// 证书二进制数据,需业务自行赋值 +let encodingData = null; +let encodingBlob = { + data: encodingData, + // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM +}; +cryptoCert.createX509Cert(encodingBlob, function (error, x509Cert) { + if (error != null) { + console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); + } else { + console.log("createX509Cert success"); + let sigAlgOid = x509Cert.getSignatureAlgOid(); + } +}); +``` + +### getSignatureAlgParams + +getSignatureAlgParams() : DataBlob + +表示获取X509证书签名算法参数。 + +**系统能力:** SystemCapability.Security.Cert + +**返回值**: + +| 类型 | 说明 | +| --------------------- | ------------------------ | +| [DataBlob](#datablob) | 表示X509证书签名算法参数 | + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +// 证书二进制数据,需业务自行赋值 +let encodingData = null; +let encodingBlob = { + data: encodingData, + // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM +}; +cryptoCert.createX509Cert(encodingBlob, function (error, x509Cert) { + if (error != null) { + console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); + } else { + console.log("createX509Cert success"); + let sigAlgParams = x509Cert.getSignatureAlgParams(); + } +}); +``` + +### getKeyUsage + +getKeyUsage() : DataBlob + +表示获取X509证书秘钥用途。 + +**系统能力:** SystemCapability.Security.Cert + +**返回值**: + +| 类型 | 说明 | +| --------------------- | -------------------- | +| [DataBlob](#datablob) | 表示X509证书秘钥用途 | + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +// 证书二进制数据,需业务自行赋值 +let encodingData = null; +let encodingBlob = { + data: encodingData, + // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM +}; +cryptoCert.createX509Cert(encodingBlob, function (error, x509Cert) { + if (error != null) { + console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); + } else { + console.log("createX509Cert success"); + let keyUsage = x509Cert.getKeyUsage(); + } +}); +``` + +### getExtKeyUsage + +getExtKeyUsage() : DataArray + +表示获取X509证书扩展秘钥用途。 + +**系统能力:** SystemCapability.Security.Cert + +**返回值**: + +| 类型 | 说明 | +| ----------------------- | ------------------------ | +| [DataArray](#dataarray) | 表示X509证书扩展秘钥用途 | + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +// 证书二进制数据,需业务自行赋值 +let encodingData = null; +let encodingBlob = { + data: encodingData, + // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM +}; +cryptoCert.createX509Cert(encodingBlob, function (error, x509Cert) { + if (error != null) { + console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); + } else { + console.log("createX509Cert success"); + let extKeyUsage = x509Cert.getExtKeyUsage(); + } +}); +``` + +### getBasicConstraints + +getBasicConstraints() : number + +表示获取X509证书基本约束。 + +**系统能力:** SystemCapability.Security.Cert + +**返回值**: + +| 类型 | 说明 | +| ------ | -------------------- | +| number | 表示X509证书基本约束 | + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +// 证书二进制数据,需业务自行赋值 +let encodingData = null; +let encodingBlob = { + data: encodingData, + // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM +}; +cryptoCert.createX509Cert(encodingBlob, function (error, x509Cert) { + if (error != null) { + console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); + } else { + console.log("createX509Cert success"); + let basicConstraints = x509Cert.getBasicConstraints(); + } +}); +``` + +### getSubjectAltNames + +getSubjectAltNames() : DataArray + +表示获取X509证书主体可选名称。 + +**系统能力:** SystemCapability.Security.Cert + +**返回值**: + +| 类型 | 说明 | +| ----------------------- | ------------------------ | +| [DataArray](#dataarray) | 表示X509证书主体可选名称 | + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +// 证书二进制数据,需业务自行赋值 +let encodingData = null; +let encodingBlob = { + data: encodingData, + // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM +}; +cryptoCert.createX509Cert(encodingBlob, function (error, x509Cert) { + if (error != null) { + console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); + } else { + console.log("createX509Cert success"); + let subjectAltNames = x509Cert.getSubjectAltNames(); + } +}); +``` + +### getIssuerAltNames + +getIssuerAltNames() : DataArray + +表示获取X509证书颁发者可选名称。 + +**系统能力:** SystemCapability.Security.Cert + +**返回值**: + +| 类型 | 说明 | +| ----------------------- | -------------------------- | +| [DataArray](#dataarray) | 表示X509证书颁发者可选名称 | + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +// 证书二进制数据,需业务自行赋值 +let encodingData = null; +let encodingBlob = { + data: encodingData, + // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM +}; +cryptoCert.createX509Cert(encodingBlob, function (error, x509Cert) { + if (error != null) { + console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); + } else { + console.log("createX509Cert success"); + let issuerAltNames = x509Cert.getIssuerAltNames(); + } +}); +``` + +## cryptoCert.createX509Crl + +createX509Crl(inStream : EncodingBlob, callback : AsyncCallback\) : void + +表示创建X509证书吊销列表的对象。 + +**系统能力:** SystemCapability.Security.Cert + +**参数**: + +| 参数名 | 类型 | 必填 | 说明 | +| -------- | ----------------------------- | ---- | ------------------------------ | +| inStream | [EncodingBlob](#encodingblob) | 是 | 表示证书吊销列表序列化数据 | +| callback | AsyncCallback\ | 是 | 回调函数。表示证书吊销列表对象 | + + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +// 证书吊销列表二进制数据,需业务自行赋值 +let encodingData = null; +let encodingBlob = { + data: encodingData, + // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM +}; +cryptoCert.createX509Crl(encodingBlob, function (error, x509Crl) { + if (error != null) { + console.log("createX509Crl failed, errCode: " + error.code + ", errMsg: " + error.message); + } else { + console.log("createX509Crl success"); + } +}); +``` + +## cryptoCert.createX509Crl + +createX509Crl(inStream : EncodingBlob) : Promise\ + +表示创建X509证书吊销列表的对象。 + +**系统能力:** SystemCapability.Security.Cert + +**参数**: + +| 参数名 | 类型 | 必填 | 说明 | +| -------- | ----------------------------- | ---- | -------------------------- | +| inStream | [EncodingBlob](#encodingblob) | 是 | 表示证书吊销列表序列化数据 | + +**返回值**: + +| 类型 | 说明 | +| ----------------- | -------------------- | +| Promise\ | 表示证书吊销列表对象 | + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +// 证书吊销列表二进制数据,需业务自行赋值 +let encodingData = null; +let encodingBlob = { + data: encodingData, + // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM +}; +cryptoCert.createX509Crl(encodingBlob).then(x509Crl => { + console.log("createX509Crl success"); +}, error => { + console.log("createX509Crl failed, errCode: " + error.code + ", errMsg: " + error.message); +}); +``` + +## X509Crl + +X509证书吊销列表对象。 + +### isRevoked + +isRevoked(cert : X509Cert) : boolean + +表示检查证书是否吊销。 + +**系统能力:** SystemCapability.Security.Cert + +**参数**: + +| 参数名 | 类型 | 必填 | 说明 | +| ------ | -------- | ---- | -------------------- | +| cert | X509Cert | 是 | 表示被检查的证书对象 | + +**返回值**: + +| 类型 | 说明 | +| --------- | --------------------------------------------- | +| boolean | 表示证书吊销状态,true表示已吊销,false表示未吊销 | + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +// 证书吊销列表二进制数据,需业务自行赋值 +let encodingData = null; +let encodingBlob = { + data: encodingData, + // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM +}; +cryptoCert.createX509Crl(encodingBlob, function (error, x509Crl) { + if (error != null) { + console.log("createX509Crl failed, errCode: " + error.code + ", errMsg: " + error.message); + } else { + console.log("createX509Crl success"); + // 业务需自行生成X509Cert证书对象 + let x509Cert = null; + try { + let revokedFlag = x509Crl.isRevoked(x509Cert); + } catch (error) { + console.log("isRevoked failed, errCode: " + error.code + ", errMsg: " + error.message); + } + } +}); +``` + +### getType + +getType() : string + +表示获取证书吊销列表类型。 + +**系统能力:** SystemCapability.Security.Cert + +**返回值**: + +| 类型 | 说明 | +| ------ | -------------------- | +| string | 表示证书吊销列表类型 | + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +// 证书吊销列表二进制数据,需业务自行赋值 +let encodingData = null; +let encodingBlob = { + data: encodingData, + // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM +}; +cryptoCert.createX509Crl(encodingBlob, function (error, x509Crl) { + if (error != null) { + console.log("createX509Crl failed, errCode: " + error.code + ", errMsg: " + error.message); + } else { + console.log("createX509Crl success"); + let type = x509Crl.getType(); + } +}); +``` + +### getEncoded + +getEncoded(callback : AsyncCallback\) : void + +表示获取X509证书吊销列表的序列化数据。 + +**系统能力:** SystemCapability.Security.Cert + +**参数**: + +| 参数名 | 类型 | 必填 | 说明 | +| -------- | ---------------------------- | ---- | ------------------------------------------ | +| callback | AsyncCallback\ | 是 | 回调函数,表示X509证书吊销列表的序列化数据 | + + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +// 证书吊销列表二进制数据,需业务自行赋值 +let encodingData = null; +let encodingBlob = { + data: encodingData, + // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM +}; +cryptoCert.createX509Crl(encodingBlob, function (error, x509Crl) { + if (error != null) { + console.log("createX509Crl failed, errCode: " + error.code + ", errMsg: " + error.message); + } else { + console.log("createX509Crl success"); + x509Crl.getEncoded(function (error, data) { + if (error != null) { + console.log("getEncoded failed, errCode: " + error.code + ", errMsg: " + error.message); + } else { + console.log("getEncoded success"); + } + }); + } +}); +``` + +### getEncoded + +getEncoded() : Promise\ + +表示获取X509证书吊销列表的序列化数据。 + +**系统能力:** SystemCapability.Security.Cert + +**返回值**: + +| 类型 | 说明 | +| ---------------------- | -------------------------------- | +| Promise\ | 表示X509证书吊销列表的序列化数据 | + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +// 证书吊销列表二进制数据,需业务自行赋值 +let encodingData = null; +let encodingBlob = { + data: encodingData, + // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM +}; +cryptoCert.createX509Crl(encodingBlob).then(x509Crl => { + console.log("createX509Crl success"); + x509Crl.getEncoded().then(result => { + console.log("getEncoded success"); + }, error => { + console.log("getEncoded failed, errCode: " + error.code + ", errMsg: " + error.message); + }); +}, error => { + console.log("createX509Crl failed, errCode: " + error.code + ", errMsg: " + error.message); +}); +``` + +### verify + +verify(key : cryptoFramework.PubKey, callback : AsyncCallback\) : void + +表示对X509证书吊销列表进行验签。 + +**系统能力:** SystemCapability.Security.Cert + +**参数**: + +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------------------- | ---- | ------------------------------------------------------------ | +| key | cryptoFramework.PubKey | 是 | 表示用于验签的公钥对象 | +| callback | AsyncCallback\ | 是 | 回调函数,使用AsyncCallback的第一个error参数判断是否验签成功,error为null表示成功,error不为null表示失败。 | + + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; +import cryptoFramework from "@ohos.security.cryptoFramework" + +// 证书吊销列表二进制数据,需业务自行赋值 +let encodingData = null; +let encodingBlob = { + data: encodingData, + // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM +}; +cryptoCert.createX509Crl(encodingBlob, function (error, x509Crl) { + if (error != null) { + console.log("createX509Crl failed, errCode: " + error.code + ", errMsg: " + error.message); + } else { + console.log("createX509Crl success"); + // 业务需通过AsyKeyGenerator生成PubKey + let pubKey = null; + x509Crl.verify(pubKey, function (error, data) { + if (error != null) { + console.log("verify failed, errCode: " + error.code + ", errMsg: " + error.message); + } else { + console.log("verify success"); + } + }); + } +}); +``` + +### verify + +verify(key : cryptoFramework.PubKey) : Promise\ + +表示对X509证书吊销列表进行验签。 + +**系统能力:** SystemCapability.Security.Cert + +**参数**: + +| 参数名 | 类型 | 必填 | 说明 | +| ------ | ------ | ---- | ---------------------- | +| key | cryptoFramework.PubKey | 是 | 表示用于验签的公钥对象 | + +**返回值**: + +| 类型 | 说明 | +| ---- | ------------------------------------------------------------ | +| Promise\ | Promise对象 | + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; +import cryptoFramework from "@ohos.security.cryptoFramework" + +// 证书吊销列表二进制数据,需业务自行赋值 +let encodingData = null; +let encodingBlob = { + data: encodingData, + // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM +}; +cryptoCert.createX509Crl(encodingBlob).then(x509Crl => { + console.log("createX509Crl success"); + // 业务需通过AsyKeyGenerator生成PubKey + let pubKey = null; + x509Crl.verify(pubKey).then(result => { + console.log("verify success"); + }, error => { + console.log("verify failed, errCode: " + error.code + ", errMsg: " + error.message); + }); +}, error => { + console.log("createX509Crl failed, errCode: " + error.code + ", errMsg: " + error.message); +}); +``` + +### getVersion + +getVersion() : number + +表示获取X509证书吊销列表的版本号。 + +**系统能力:** SystemCapability.Security.Cert + +**返回值**: + +| 类型 | 说明 | +| ------ | -------------------------------- | +| number | 表示获取X509证书吊销列表的版本号 | + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +// 证书吊销列表二进制数据,需业务自行赋值 +let encodingData = null; +let encodingBlob = { + data: encodingData, + // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM +}; +cryptoCert.createX509Crl(encodingBlob, function (error, x509Crl) { + if (error != null) { + console.log("createX509Crl failed, errCode: " + error.code + ", errMsg: " + error.message); + } else { + console.log("createX509Crl success"); + let version = x509Crl.getVersion(); + } +}); +``` + +### getIssuerName + +getIssuerName() : DataBlob + +表示获取X509证书吊销列表颁发者名称。 + +**系统能力:** SystemCapability.Security.Cert + +**返回值**: + +| 类型 | 说明 | +| --------------------- | ------------------------------ | +| [DataBlob](#datablob) | 表示X509证书吊销列表颁发者名称 | + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +// 证书吊销列表二进制数据,需业务自行赋值 +let encodingData = null; +let encodingBlob = { + data: encodingData, + // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM +}; +cryptoCert.createX509Crl(encodingBlob, function (error, x509Crl) { + if (error != null) { + console.log("createX509Crl failed, errCode: " + error.code + ", errMsg: " + error.message); + } else { + console.log("createX509Crl success"); + let issuerName = x509Crl.getIssuerName(); + } +}); +``` + +### getLastUpdate + +getLastUpdate() : string + +表示获取X509证书吊销列表最后一次更新日期。 + +**系统能力:** SystemCapability.Security.Cert + +**返回值**: + +| 类型 | 说明 | +| ------ | ------------------------------------ | +| string | 表示X509证书吊销列表最后一次更新日期 | + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +// 证书吊销列表二进制数据,需业务自行赋值 +let encodingData = null; +let encodingBlob = { + data: encodingData, + // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM +}; +cryptoCert.createX509Crl(encodingBlob, function (error, x509Crl) { + if (error != null) { + console.log("createX509Crl failed, errCode: " + error.code + ", errMsg: " + error.message); + } else { + console.log("createX509Crl success"); + let lastUpdate = x509Crl.getLastUpdate(); + } +}); +``` + +### getNextUpdate + +getNextUpdate() : string + +表示获取证书吊销列表下一次更新的日期。 + +**系统能力:** SystemCapability.Security.Cert + +**返回值**: + +| 类型 | 说明 | +| ------ | ------------------------------------ | +| string | 表示X509证书吊销列表下一次更新的日期 | + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +// 证书吊销列表二进制数据,需业务自行赋值 +let encodingData = null; +let encodingBlob = { + data: encodingData, + // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM +}; +cryptoCert.createX509Crl(encodingBlob, function (error, x509Crl) { + if (error != null) { + console.log("createX509Crl failed, errCode: " + error.code + ", errMsg: " + error.message); + } else { + console.log("createX509Crl success"); + let nextUpdate = x509Crl.getNextUpdate(); + } +}); +``` + +### getRevokedCert + +getRevokedCert(serialNumber : number) : X509CrlEntry + +表示通过指定证书序列号获取被吊销X509证书对象。 + +**系统能力:** SystemCapability.Security.Cert + +**参数**: + +| 参数名 | 类型 | 必填 | 说明 | +| ------------ | ------ | ---- | -------------- | +| serialNumber | number | 是 | 表示证书序列号 | + +**返回值**: + +| 类型 | 说明 | +| ---------------------- | --------------------- | +| X509CrlEntry | 表示被吊销X509证书对象 | + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +// 证书吊销列表二进制数据,需业务自行赋值 +let encodingData = null; +let encodingBlob = { + data: encodingData, + // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM +}; +cryptoCert.createX509Crl(encodingBlob, function (error, x509Crl) { + if (error != null) { + console.log("createX509Crl failed, errCode: " + error.code + ", errMsg: " + error.message); + } else { + console.log("createX509Crl success"); + // 业务需赋值为对应证书的序列号 + let serialNumber = 1000; + try { + let entry = x509Crl.getRevokedCert(serialNumber); + } catch (error) { + console.log("getRevokedCert failed, errCode: " + error.code + ", errMsg: " + error.message); + } + } +}); +``` + +### getRevokedCertWithCert + +getRevokedCertWithCert(cert : X509Cert) : X509CrlEntry + +表示通过指定证书对象获取被吊销X509证书对象。 + +**系统能力:** SystemCapability.Security.Cert + +**参数**: + +| 参数名 | 类型 | 必填 | 说明 | +| ------ | -------- | ---- | ------------ | +| cert | X509Cert | 是 | 表示证书对象 | + +**返回值**: + +| 类型 | 说明 | +| ------------ | -------------------- | +| X509CrlEntry | 表示被吊销X509证书对象 | + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +// 证书吊销列表二进制数据,需业务自行赋值 +let encodingData = null; +let encodingBlob = { + data: encodingData, + // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM +}; +cryptoCert.createX509Crl(encodingBlob, function (error, x509Crl) { + if (error != null) { + console.log("createX509Crl failed, errCode: " + error.code + ", errMsg: " + error.message); + } else { + console.log("createX509Crl success"); + // 业务需自行生成X509Cert证书对象 + let x509Cert = null; + try { + let entry = x509Crl.getRevokedCertWithCert(x509Cert); + } catch (error) { + console.log("getRevokedCertWithCert failed, errCode: " + error.code + ", errMsg: " + error.message); + } + } +}); +``` + +### getRevokedCerts + +getRevokedCerts(callback : AsyncCallback>) : void + +表示获取被吊销X509证书列表。 + +**系统能力:** SystemCapability.Security.Cert + +**参数**: + +| 参数名 | 类型 | 必填 | 说明 | +| -------- | ----------------------------------- | ---- | -------------------------------- | +| callback | AsyncCallback> | 是 | 回调函数。表示被吊销X509证书列表 | + + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +// 证书吊销列表二进制数据,需业务自行赋值 +let encodingData = null; +let encodingBlob = { + data: encodingData, + // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM +}; +cryptoCert.createX509Crl(encodingBlob, function (error, x509Crl) { + if (error != null) { + console.log("createX509Crl failed, errCode: " + error.code + ", errMsg: " + error.message); + } else { + console.log("createX509Crl success"); + x509Crl.getRevokedCerts(function (error, array) { + if (error != null) { + console.log("getRevokedCerts failed, errCode: " + error.code + ", errMsg: " + error.message); + } else { + console.log("getRevokedCerts success"); + } + }); + } +}); +``` + +### getRevokedCerts + +getRevokedCerts() : Promise> + +表示获取被吊销X509证书列表。 + +**系统能力:** SystemCapability.Security.Cert + +**返回值**: + +| 类型 | 说明 | +| ----------------------------- | ---------------------- | +| Promise> | 表示被吊销X509证书列表 | + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +// 证书吊销列表二进制数据,需业务自行赋值 +let encodingData = null; +let encodingBlob = { + data: encodingData, + // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM +}; +cryptoCert.createX509Crl(encodingBlob).then(x509Crl => { + console.log("createX509Crl success"); + x509Crl.getRevokedCerts().then(array => { + console.log("getRevokedCerts success"); + }, error => { + console.log("getRevokedCerts failed, errCode: " + error.code + ", errMsg: " + error.message); + }); +}, error => { + console.log("createX509Crl failed, errCode: " + error.code + ", errMsg: " + error.message); +}); +``` + +### getTbsInfo + +getTbsInfo() : DataBlob + +表示获取证书吊销列表的tbsCertList信息。 + +**系统能力:** SystemCapability.Security.Cert + +**返回值**: + +| 类型 | 说明 | +| --------------------- | ------------------------------- | +| [DataBlob](#datablob) | 表示证书吊销列表的tbsCertList信息 | + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +// 证书吊销列表二进制数据,需业务自行赋值 +let encodingData = null; +let encodingBlob = { + data: encodingData, + // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM +}; +cryptoCert.createX509Crl(encodingBlob, function (error, x509Crl) { + if (error != null) { + console.log("createX509Crl failed, errCode: " + error.code + ", errMsg: " + error.message); + } else { + console.log("createX509Crl success"); + try { + let tbsInfo = x509Crl.getTbsInfo(); + } catch (error) { + console.log("getTbsInfo failed, errCode: " + error.code + ", errMsg: " + error.message); + } + } +}); +``` + +### getSignature + +getSignature() : DataBlob + +表示获取X509证书吊销列表的签名数据。 + +**系统能力:** SystemCapability.Security.Cert + +**返回值**: + +| 类型 | 说明 | +| --------------------- | ------------------------------ | +| [DataBlob](#datablob) | 表示X509证书吊销列表的签名数据 | + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +// 证书吊销列表二进制数据,需业务自行赋值 +let encodingData = null; +let encodingBlob = { + data: encodingData, + // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM +}; +cryptoCert.createX509Crl(encodingBlob, function (error, x509Crl) { + if (error != null) { + console.log("createX509Crl failed, errCode: " + error.code + ", errMsg: " + error.message); + } else { + console.log("createX509Crl success"); + let signature = x509Crl.getSignature(); + } +}); +``` + +### getSignatureAlgName + +getSignatureAlgName() : string + +表示获取X509证书吊销列表签名的算法名称。 + +**系统能力:** SystemCapability.Security.Cert + +**返回值**: + +| 类型 | 说明 | +| ------ | -------------------------------- | +| string | 表示X509证书吊销列表签名的算法名 | + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +// 证书吊销列表二进制数据,需业务自行赋值 +let encodingData = null; +let encodingBlob = { + data: encodingData, + // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM +}; +cryptoCert.createX509Crl(encodingBlob, function (error, x509Crl) { + if (error != null) { + console.log("createX509Crl failed, errCode: " + error.code + ", errMsg: " + error.message); + } else { + console.log("createX509Crl success"); + let sigAlgName = x509Crl.getSignatureAlgName(); + } +}); +``` + +### getSignatureAlgOid + +getSignatureAlgOid() : string + +表示获取X509证书吊销列表签名算法的对象标志符OID(Object Identifier)。OID是由国际标准组织(ISO)的名称注册机构分配。 + +**系统能力:** SystemCapability.Security.Cert + +**返回值**: + +| 类型 | 说明 | +| ------ | --------------------------------------------- | +| string | 表示X509证书吊销列表签名算法的对象标志符OID。 | + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +// 证书吊销列表二进制数据,需业务自行赋值 +let encodingData = null; +let encodingBlob = { + data: encodingData, + // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM +}; +cryptoCert.createX509Crl(encodingBlob, function (error, x509Crl) { + if (error != null) { + console.log("createX509Crl failed, errCode: " + error.code + ", errMsg: " + error.message); + } else { + console.log("createX509Crl success"); + let sigAlgOid = x509Crl.getSignatureAlgOid(); + } +}); +``` + +### getSignatureAlgParams + +getSignatureAlgParams() : DataBlob + +表示获取X509证书吊销列表签名的算法参数。 + +**系统能力:** SystemCapability.Security.Cert + +**返回值**: + +| 类型 | 说明 | +| --------------------- | ---------------------------------- | +| [DataBlob](#datablob) | 表示X509证书吊销列表签名的算法参数 | + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +// 证书吊销列表二进制数据,需业务自行赋值 +let encodingData = null; +let encodingBlob = { + data: encodingData, + // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM +}; +cryptoCert.createX509Crl(encodingBlob, function (error, x509Crl) { + if (error != null) { + console.log("createX509Crl failed, errCode: " + error.code + ", errMsg: " + error.message); + } else { + console.log("createX509Crl success"); + let sigAlgParams = x509Crl.getSignatureAlgParams(); + } +}); +``` + +## cryptoCert.createCertChainValidator + +createCertChainValidator(algorithm :string) : CertChainValidator + +表示创建证书链校验器对象。 + +**系统能力:** SystemCapability.Security.Cert + +**参数**: + +| 参数名 | 类型 | 必填 | 说明 | +| --------- | ------ | ---- | ------------------------------------------ | +| algorithm | string | 是 | 表示证书链校验器算法。当前仅支持输入“PKIX” | + +**返回值**: + +| 类型 | 说明 | +| ------------------ | -------------------- | +| CertChainValidator | 表示证书链校验器对象 | + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +let validator = cryptoCert.createCertChainValidator("PKIX"); +``` + +## CertChainValidator + +证书链校验器对象。 + + +### 属性 + +**系统能力:** SystemCapability.Security.CryptoFramework + +| 名称 | 类型 | 可读 | 可写 | 说明 | +| ------- | ------ | ---- | ---- | -------------------------- | +| algorithm | string | 是 | 否 | X509证书链校验器算法名称。 | + + +### validate + +validate(certChain : CertChainData, callback : AsyncCallback\) : void + +表示校验X509证书链。 +由于端侧系统时间不可信,证书链校验不包含对证书有效时间的校验。如果需要检查证书的时间有效性,可使用X509证书的[checkValidityWithDate](#checkvaliditywithdate)方法进行检查。详见[证书规格](../../security/cert-overview.md#证书规格) + +**系统能力:** SystemCapability.Security.Cert + +**参数**: + +| 参数名 | 类型 | 必填 | 说明 | +| --------- | ------------------------------- | ---- | ------------------------------------------------------------ | +| certChain | [CertChainData](#certchaindata) | 是 | 表示X509证书链序列化数据 | +| callback | AsyncCallback\ | 是 | 回调函数。使用AsyncCallback的第一个error参数判断是否校验成功,error为null表示成功,error不为null表示失败 | + + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +let validator = cryptoCert.createCertChainValidator("PKIX"); +// 证书链二进制数据,需业务自行赋值 +let encodingData = null; +// 证书链包含的证书个数,需业务自行赋值 +let certCount = 2; +let certChainData = { + data: encodingData, + count: certCount, + // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM +}; +validator.validate(certChainData, function (error, data) { + if (error != null) { + console.log("validate failed, errCode: " + error.code + ", errMsg: " + error.message); + } else { + console.log("validate success"); + } +}); +``` + +### validate + +validate(certChain : CertChainData) : Promise\ + +表示校验X509证书链。 +由于端侧系统时间不可信,证书链校验不包含对证书有效时间的校验。如果需要检查证书的时间有效性,可使用X509证书的[checkValidityWithDate](#checkvaliditywithdate)方法进行检查。详见[证书规格](../../security/cert-overview.md#证书规格) + +**系统能力:** SystemCapability.Security.Cert + +**参数**: + +| 参数名 | 类型 | 必填 | 说明 | +| --------- | ------------------------------- | ---- | -------------------------- | +| certChain | [CertChainData](#certchaindata) | 是 | 表示X509证书链序列化数据。 | + +**返回值**: + +| 类型 | 说明 | +| -------------- | ----------- | +| Promise\ | Promise对象 | + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +let validator = cryptoCert.createCertChainValidator("PKIX"); +// 证书链二进制数据,需业务自行赋值 +let encodingData = null; +// 证书链包含的证书个数,需业务自行赋值 +let certCount = 2; +let certChainData = { + data: encodingData, + count: certCount, + // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM +}; +validator.validate(certChainData).then(result => { + console.log("validate success"); +}, error => { + console.log("validate failed, errCode: " + error.code + ", errMsg: " + error.message); +}); +``` + +### algorithm + +algorithm : string + +表示X509证书链校验器算法名称。 + +**系统能力:** SystemCapability.Security.Cert + +**返回值**: + +| 类型 | 说明 | +| ------ | ------------------------ | +| string | 表示证书链校验器算法名称 | + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +let validator = cryptoCert.createCertChainValidator("PKIX"); +let algorithm = validator.algorithm; +``` + +## X509CrlEntry + +被吊销证书对象。 + +### getEncoded + +getEncoded(callback : AsyncCallback\) : void + +表示获取被吊销证书的序列化数据。 + +**系统能力:** SystemCapability.Security.Cert + +**参数**: + +| 参数名 | 类型 | 必填 | 说明 | +| -------- | --------------------------------------------- | ---- | ------------------------------------ | +| callback | AsyncCallback\<[EncodingBlob](#encodingblob)> | 是 | 回调函数。表示被吊销证书的序列化数据 | + + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +// 业务需通过X509Crl的getRevokedCert相关方法获取X509CrlEntry +let x509CrlEntry = null; +x509CrlEntry.getEncoded(function (error, data) { + if (error != null) { + console.log("getEncoded failed, errCode: " + error.code + ", errMsg: " + error.message); + } else { + console.log("getEncoded success"); + } +}); +``` + +### getEncoded + +getEncoded() : Promise\ + +表示获取被吊销证书的序列化数据。 + +**系统能力:** SystemCapability.Security.Cert + +**返回值**: + +| 类型 | 说明 | +| --------------------------------------- | -------------------------- | +| Promise\<[EncodingBlob](#encodingblob)> | 表示被吊销证书的序列化数据 | + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +// 业务需通过X509Crl的getRevokedCert相关方法获取X509CrlEntry +let x509CrlEntry = null; +x509CrlEntry.getEncoded().then(result => { + console.log("getEncoded success"); +}, error => { + console.log("getEncoded failed, errCode: " + error.code + ", errMsg: " + error.message); +}); +``` + +### getSerialNumber + +getSerialNumber() : number + +表示获取被吊销证书的序列号。 + +**系统能力:** SystemCapability.Security.Cert + +**返回值**: + +| 类型 | 说明 | +| ------ | ---------------------- | +| number | 表示被吊销证书的序列号 | + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +// 业务需通过X509Crl的getRevokedCert相关方法获取X509CrlEntry +let x509CrlEntry = null; +let serialNumber = x509CrlEntry.getSerialNumber(); +``` + +### getCertIssuer + +getCertIssuer() : DataBlob + +表示获取被吊销证书的颁发者信息。 + +**系统能力:** SystemCapability.Security.Cert + +**返回值**: + +| 类型 | 说明 | +| --------------------- | ---------------------- - | +| [DataBlob](#datablob) | 表示被吊销证书的颁发者信息 | + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +// 业务需通过X509Crl的getRevokedCert相关方法获取X509CrlEntry +let x509CrlEntry = null; +try { + let issuer = x509CrlEntry.getCertIssuer(); +} catch (error) { + console.log("getCertIssuer failed, errCode: " + error.code + ", errMsg: " + error.message); +} +``` + +### getRevocationDate + +getRevocationDate() : string + +表示获取证书被吊销的日期。 + +**系统能力:** SystemCapability.Security.Cert + +**返回值**: + +| 类型 | 说明 | +| ------ | ------------------ | +| string | 表示证书被吊销的日期 | + +**示例:** + +```js +import cryptoCert from '@ohos.security.cert'; + +// 业务需通过X509Crl的getRevokedCert相关方法获取X509CrlEntry +let x509CrlEntry = null; +try { + let date = x509CrlEntry.getRevocationDate(); +} catch (error) { + console.log("getRevocationDate failed, errCode: " + error.code + ", errMsg: " + error.message); +} +``` diff --git a/zh-cn/application-dev/reference/apis/js-apis-cryptoFramework.md b/zh-cn/application-dev/reference/apis/js-apis-cryptoFramework.md index f47e1aa60faa4b2be0bceab874b4cc232f95143a..79692559867267ac92aafcc694f1f48bff0fca77 100644 --- a/zh-cn/application-dev/reference/apis/js-apis-cryptoFramework.md +++ b/zh-cn/application-dev/reference/apis/js-apis-cryptoFramework.md @@ -1,6 +1,6 @@ # @ohos.security.cryptoFramework (加解密算法库框架) -为屏蔽底层硬件和算法库,向上提供统一的密码算法库加解密和证书相关接口。 +为屏蔽底层硬件和算法库,向上提供统一的密码算法库加解密相关接口。 > **说明:** > @@ -25,12 +25,6 @@ import cryptoFramework from "@ohos.security.cryptoFramework" | ERR_OUT_OF_MEMORY | 17620001 | 内存错误。 | | ERR_RUNTIME_ERROR | 17620002 | 运行时外部错误。 | | ERR_CRYPTO_OPERATION | 17630001 | 调用三方算法库API出错。 | -| ERR_CERT_SIGNATURE_FAILURE | 17630002 | 证书签名验证错误。 | -| ERR_CERT_NOT_YET_VALID | 17630003 | 证书尚未生效。 | -| ERR_CERT_HAS_EXPIRED | 17630004 | 证书过期。 | -| ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY | 17630005 | 无法获取证书的颁发者。 | -| ERR_KEYUSAGE_NO_CERTSIGN | 17630006 | 证书的秘钥用途不含证书签名。 | -| ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE | 17630007 | 证书的秘钥用途不含数字签名。 | ## DataBlob @@ -41,55 +35,6 @@ buffer数组。 | ---- | ---------- | ---- | ---- | ------ | | data | Uint8Array | 是 | 是 | 数据。 | -## DataArray - -buffer数组的列表。 - **系统能力:** SystemCapability.Security.CryptoFramework - -| 名称 | 类型 | 可读 | 可写 | 说明 | -| ---- | ---------- | ---- | ---- | ---------- | -| data | Array\ | 是 | 是 | 数据列表。 | - -## EncodingFormat - - 表示证书编码格式的枚举。 - - **系统能力:** SystemCapability.Security.CryptoFramework - -| 名称 | 值 | 说明 | -| ---------- | ------ | --------- | -| FORMAT_DER | 0 | DER格式。 | -| FORMAT_PEM | 1 | PEM格式。 | - - -## EncodingBlob - -证书链数据,在证书链校验时,作为入参传入。 - -### 属性 - -**系统能力:** SystemCapability.Security.CryptoFramework - -| 名称 | 类型 | 可读 | 可写 | 说明 | -| -------------- | --------------------------------- | ---- | ---- | ------------------------------ | -| data | Uint8Array | 是 | 是 | 传入的证书数据。 | -| encodingFormat | [EncodingFormat](#encodingformat) | 是 | 是 | 指明证书编码格式。 | - - -## CertChainData - -证书链数据,在证书链校验时,作为入参传入。 - -### 属性 - -**系统能力:** SystemCapability.Security.CryptoFramework - -| 名称 | 类型 | 可读 | 可写 | 说明 | -| -------------- | --------------------------------- | ---- | ---- | ------------------------------------------------------------ | -| data | Uint8Array | 是 | 是 | 证书数据,按照长度(2字节)-数据的形式传入,如:08ABCDEFGH07ABCDEFG,第一本证书,前2个字节表示证书的长度为8字节,后面附加8字节的证书数据;第2本证书前2个字节表示证书的长度为7字节,后面附加7字节的证书数据。 | -| count | number | 是 | 是 | 传入的数据中,包含的证书数量。 | -| encodingFormat | [EncodingFormat](#encodingformat) | 是 | 是 | 指明证书编码格式。 | - ## cryptoFramework.createMac @@ -922,7 +867,7 @@ promiseGenerateRand.then(randData => { ### setSeed -setSeed(seed : DataBlob, callback : AsyncCallback\) : void; +setSeed(seed : DataBlob) : void; 设置指定的种子 @@ -931,13 +876,12 @@ setSeed(seed : DataBlob, callback : AsyncCallback\) : void; | 参数名 | 类型 | 必填 | 说明 | | -------- | --------------------- | ---- | ---------- | | seed | DataBlob | 是 | 设置的种子 | -| callback | AsyncCallback\ | 是 | 回调函数 | **错误码:** | 错误码ID | 错误信息 | -| -------- | ------------------ | -| 17620001 | memory error | +| -------- | ----------------- | +| 17620001 | memory error | **示例:** @@ -956,61 +900,15 @@ rand.generateRandom(12, (err, randData) => { console.error("[Callback] err: " + err.code); } else { console.error("[Callback]: generate random result: " + randData.data); - rand.setSeed(randData, (err1, data) => { - if (err1) { - console.error("[Callback] err: " + err1.code); - } else { - console.error("[Callback]: setSeed success"); - } - }); + try { + rand.setSeed(randData); + } catch (error) { + console.log("setSeed failed, errCode: " + error.code + ", errMsg: " + error.message); + } } }); ``` -### setSeed - -setSeed(seed : DataBlob) : Promise\; - -设置指定的种子 - -**系统能力:** SystemCapability.Security.CryptoFramework - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| ------ | -------- | ---- | ---------- | -| seed | DataBlob | 是 | 设置的种子 | - -**错误码:** - -| 错误码ID | 错误信息 | -| -------- | ------------------ | -| 17620001 | memory error | - -**示例:** - -```javascript -import cryptoFramework from "@ohos.security.cryptoFramework" - -var rand; -try { - rand = cryptoFramework.createRandom(); -} catch (error) { - console.error("[Callback]: error code: " + error.code + ", message is: " + error.message); -} - -var promiseGenerateRand = rand.generateRandom(12); -promiseGenerateRand.then(randData => { - console.error("[Promise]: rand result: " + randData.data); - var promiseSetSeed = rand.setSeed(randData); - return promiseSetSeed; -}).then(() => { - console.error("[Promise]: setSeed success"); -}).catch(error => { - console.error("[Promise]: error: " + error.message); -}); -``` - ## ParamsSpec 加解密参数,在进行对称加解密时需要构造其子类对象,并将子类对象传入[init()](#init-2)方法。
适用于需要iv等参数的对称加解密模式(对于无iv等参数的模式如ECB模式,无需构造,在[init()](#init-2)中传入null即可)。 @@ -2124,7 +2022,7 @@ init(priKey : PriKey, callback : AsyncCallback\) : void ### init -init(opMode : CryptoMode, key : Key, params : ParamsSpec) : Promise\ +init(priKey : PriKey) : Promise\ 使用私钥初始化Sign对象,Promise形式 @@ -2572,2325 +2470,3 @@ keyAgreementPromise.then((secret) => { console.error("keyAgreement error."); }); ``` - -## cryptoFramework.createX509Cert - -createX509Cert(inStream : EncodingBlob, callback : AsyncCallback\) : void - -表示创建X509证书对象。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**参数**: - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | ----------------------------- | ---- | -------------------------- | -| inStream | [EncodingBlob](#encodingblob) | 是 | X509证书序列化数据 | -| callback | AsyncCallback\ | 是 | 回调函数。表示X509证书对象 | - - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Cert(encodingBlob, function (error, x509Cert) { - if (error != null) { - console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("createX509Cert success"); - } -}); -``` - -## cryptoFramework.createX509Cert - -createX509Cert(inStream : EncodingBlob) : Promise\ - -表示创建X509证书对象。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**参数**: - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | ----------------------------- | ---- | ------------------ | -| inStream | [EncodingBlob](#encodingblob) | 是 | X509证书序列化数据 | - -**返回值**: - -| 类型 | 说明 | -| ------- | ---------------- | -| Promise\ | 表示X509证书对象 | - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Cert(encodingBlob).then(x509Cert => { - console.log("createX509Cert success"); -}, error => { - console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); -}); -``` - -## X509Cert - -X509证书类。 - -### verify - -verify(key : PubKey, callback : AsyncCallback\) : void - -表示对证书验签。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**参数**: - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | --------------------- | ---- | ------------------------------------------------------------ | -| key | [PubKey](#pubkey) | 是 | 用于验签的公钥对象 | -| callback | AsyncCallback\ | 是 | 回调函数。使用AsyncCallback的第一个error参数判断是否验签成功,error为null表示成功,不为null表示失败 | - - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Cert(encodingBlob, function (error, x509Cert) { - if (error != null) { - console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("createX509Cert success"); - // 业务需通过AsyKeyGenerator生成PubKey或通过上级X509Cert证书对象的getPublicKey获取PubKey - let pubKey = null; - x509Cert.verify(pubKey, function (error, data) { - if (error != null) { - console.log("verify failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("verify success"); - } - }); - } -}); -``` - -### verify - -verify(key : PubKey) : Promise\ - -表示对证书验签。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**参数**: - -| 参数名 | 类型 | 必填 | 说明 | -| ------ | ----------------- | ---- | ------------------ | -| key | [PubKey](#pubkey) | 是 | 用于验签的公钥对象 | - -**返回值**: - -| 类型 | 说明 | -| -------------- | ----------- | -| Promise\ | Promise对象 | - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Cert(encodingBlob).then(x509Cert => { - console.log("createX509Cert success"); - // 业务需通过AsyKeyGenerator生成PubKey或通过上级X509Cert证书对象的getPublicKey获取PubKey - let pubKey = null; - x509Cert.verify(pubKey).then(result => { - console.log("verify success"); - }, error => { - console.log("verify failed, errCode: " + error.code + ", errMsg: " + error.message); - }); -}, error => { - console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); -}); -``` - -### getEncoded - -getEncoded(callback : AsyncCallback\) : void - -表示获取X509证书序列化数据。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**参数**: - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | --------------------------------------------- | ---- | -------------------------------- | -| callback | AsyncCallback\<[EncodingBlob](#encodingblob)> | 是 | 回调函数。表示X509证书序列化数据 | - - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Cert(encodingBlob, function (error, x509Cert) { - if (error != null) { - console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("createX509Cert success"); - x509Cert.getEncoded(function (error, data) { - if (error != null) { - console.log("getEncoded failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("getEncoded success"); - } - }); - } -}); -``` - -### getEncoded - -getEncoded() : Promise\ - -表示获取X509证书序列化数据。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**返回值**: - -| 类型 | 说明 | -| --------------------------------------- | ---------------------- | -| Promise\<[EncodingBlob](#encodingblob)> | 表示X509证书序列化数据 | - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Cert(encodingBlob).then(x509Cert => { - console.log("createX509Cert success"); - x509Cert.getEncoded().then(result => { - console.log("getEncoded success"); - }, error => { - console.log("getEncoded failed, errCode: " + error.code + ", errMsg: " + error.message); - }); -}, error => { - console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); -}); -``` - -### getPublicKey - -getPublicKey(callback : AsyncCallback\) : void - -表示获取X509证书公钥。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**参数**: - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | ------------- | ---- | -------------------------- | -| callback | AsyncCallback\ | 是 | 回调函数,X509证书公钥对象 | - - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Cert(encodingBlob, function (error, x509Cert) { - if (error != null) { - console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("createX509Cert success"); - x509Cert.getPublicKey(function (error, pubKey) { - if (error != null) { - console.log("getPublicKey failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("getPublicKey success"); - } - }); - } -}); -``` - -### getPublicKey - -getPublicKey() : Promise\ - -表示获取X509证书公钥。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**返回值**: - -| 类型 | 说明 | -| ------ | ---------------- | -| PubKey | X509证书公钥对象 | - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Cert(encodingBlob).then(x509Cert => { - console.log("createX509Cert success"); - x509Cert.getPublicKey().then(pubKey => { - console.log("getPublicKey success"); - }, error => { - console.log("getPublicKey failed, errCode: " + error.code + ", errMsg: " + error.message); - }); -}, error => { - console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); -}); -``` - -### checkValidityWithDate - -checkValidityWithDate(date: string, callback : AsyncCallback\) : void - -表示检查X509证书有效期。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**参数**: - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------------------- | ---- | ------------------------------------------------------------ | -| date | string | 是 | 日期 | -| callback | AsyncCallback\ | 是 | 回调函数。使用AsyncCallback的第一个error参数判断是否检查成功,error为null表示成功,不为null表示失败 | - - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Cert(encodingBlob, function (error, x509Cert) { - if (error != null) { - console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("createX509Cert success"); - let date = "150527000001Z"; - x509Cert.checkValidityWithDate(date, function (error, data) { - if (error != null) { - console.log("checkValidityWithDate failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("checkValidityWithDate success"); - } - }); - } -}); -``` - -### checkValidityWithDate - -checkValidityWithDate(date: string) : Promise\ - -表示检查X509证书有效期。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**参数**: - -| 参数名 | 类型 | 必填 | 说明 | -| ------ | ------ | ---- | ---- | -| date | string | 是 | 日期 | - -**返回值**: - -| 类型 | 说明 | -| ---- | ------------------------------------------------------------ | -| void | 使用AsyncCallback的第一个error参数判断是否检查成功,error为null表示成功,不为null表示失败 | - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Cert(encodingBlob).then(x509Cert => { - console.log("createX509Cert success"); - let date = "150527000001Z"; - x509Cert.checkValidityWithDate(date).then(result => { - console.log("checkValidityWithDate success"); - }, error => { - console.log("checkValidityWithDate failed, errCode: " + error.code + ", errMsg: " + error.message); - }); -}, error => { - console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); -}); -``` - -### getVersion - -getVersion() : number - -表示获取X509证书版本。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**返回值**: - -| 类型 | 说明 | -| ------ | ---------------- | -| number | 表示X509证书版本 | - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Cert(encodingBlob, function (error, x509Cert) { - if (error != null) { - console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("createX509Cert success"); - let version = x509Cert.getVersion(); - } -}); -``` - -### getSerialNumber - -getSerialNumber() : number - -表示获取X509证书序列号。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**返回值**: - -| 类型 | 说明 | -| ------ | ------------------ | -| number | 表示X509证书序列号 | - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Cert(encodingBlob, function (error, x509Cert) { - if (error != null) { - console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("createX509Cert success"); - let serialNumber = x509Cert.getSerialNumber(); - } -}); -``` - -### getIssuerName - -getIssuerName() : DataBlob - -表示获取X509证书颁发者名称。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**返回值**: - -| 类型 | 说明 | -| --------------------- | ---------------------- | -| [DataBlob](#datablob) | 表示X509证书颁发者名称 | - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Cert(encodingBlob, function (error, x509Cert) { - if (error != null) { - console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("createX509Cert success"); - let issuerName = x509Cert.getIssuerName(); - } -}); -``` - -### getSubjectName - -getSubjectName() : DataBlob - -表示获取X509证书主体名称。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**返回值**: - -| 类型 | 说明 | -| --------------------- | -------------------- | -| [DataBlob](#datablob) | 表示X509证书主体名称 | - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Cert(encodingBlob, function (error, x509Cert) { - if (error != null) { - console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("createX509Cert success"); - let subjectName = x509Cert.getSubjectName(); - } -}); -``` - -### getNotBeforeTime - -getNotBeforeTime() : string - -表示获取X509证书有效期起始时间。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**返回值**: - -| 类型 | 说明 | -| ------ | -------------------------- | -| string | 表示X509证书有效期起始时间 | - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Cert(encodingBlob, function (error, x509Cert) { - if (error != null) { - console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("createX509Cert success"); - let notBefore = x509Cert.getNotBeforeTime(); - } -}); -``` - -### getNotAfterTime - -getNotAfterTime() : string - -表示获取X509证书有效期截止时间。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**返回值**: - -| 类型 | 说明 | -| ------ | -------------------------- | -| string | 表示X509证书有效期截止时间 | - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Cert(encodingBlob, function (error, x509Cert) { - if (error != null) { - console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("createX509Cert success"); - let notAfter = x509Cert.getNotAfterTime(); - } -}); -``` - -### getSignature - -getSignature() : DataBlob - -表示获取X509证书签名数据。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**返回值**: - -| 类型 | 说明 | -| --------------------- | -------------------- | -| [DataBlob](#datablob) | 表示X509证书签名数据 | - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Cert(encodingBlob, function (error, x509Cert) { - if (error != null) { - console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("createX509Cert success"); - let signature = x509Cert.getSignature(); - } -}); -``` - -### getSignatureAlgName - -getSignatureAlgName() : string - -表示获取X509证书签名算法名称。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**返回值**: - -| 类型 | 说明 | -| ------ | ------------------------ | -| string | 表示X509证书签名算法名称 | - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Cert(encodingBlob, function (error, x509Cert) { - if (error != null) { - console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("createX509Cert success"); - let sigAlgName = x509Cert.getSignatureAlgName(); - } -}); -``` - -### getSignatureAlgOid - -getSignatureAlgOid() : string - -表示获取X509证书签名算法的对象标志符OID(Object Identifier)。OID是由国际标准组织(ISO)的名称注册机构分配。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**返回值**: - -| 类型 | 说明 | -| ------ | --------------------------------- | -| string | 表示X509证书签名算法对象标志符OID | - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Cert(encodingBlob, function (error, x509Cert) { - if (error != null) { - console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("createX509Cert success"); - let sigAlgOid = x509Cert.getSignatureAlgOid(); - } -}); -``` - -### getSignatureAlgParams - -getSignatureAlgParams() : DataBlob - -表示获取X509证书签名算法参数。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**返回值**: - -| 类型 | 说明 | -| --------------------- | ------------------------ | -| [DataBlob](#datablob) | 表示X509证书签名算法参数 | - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Cert(encodingBlob, function (error, x509Cert) { - if (error != null) { - console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("createX509Cert success"); - let sigAlgParams = x509Cert.getSignatureAlgParams(); - } -}); -``` - -### getKeyUsage - -getKeyUsage() : DataBlob - -表示获取X509证书秘钥用途。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**返回值**: - -| 类型 | 说明 | -| --------------------- | -------------------- | -| [DataBlob](#datablob) | 表示X509证书秘钥用途 | - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Cert(encodingBlob, function (error, x509Cert) { - if (error != null) { - console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("createX509Cert success"); - let keyUsage = x509Cert.getKeyUsage(); - } -}); -``` - -### getExtKeyUsage - -getExtKeyUsage() : DataArray - -表示获取X509证书扩展秘钥用途。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**返回值**: - -| 类型 | 说明 | -| ----------------------- | ------------------------ | -| [DataArray](#dataarray) | 表示X509证书扩展秘钥用途 | - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Cert(encodingBlob, function (error, x509Cert) { - if (error != null) { - console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("createX509Cert success"); - let extKeyUsage = x509Cert.getExtKeyUsage(); - } -}); -``` - -### getBasicConstraints - -getBasicConstraints() : number - -表示获取X509证书基本约束。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**返回值**: - -| 类型 | 说明 | -| ------ | -------------------- | -| number | 表示X509证书基本约束 | - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Cert(encodingBlob, function (error, x509Cert) { - if (error != null) { - console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("createX509Cert success"); - let basicConstraints = x509Cert.getBasicConstraints(); - } -}); -``` - -### getSubjectAltNames - -getSubjectAltNames() : DataArray - -表示获取X509证书主体可选名称。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**返回值**: - -| 类型 | 说明 | -| ----------------------- | ------------------------ | -| [DataArray](#dataarray) | 表示X509证书主体可选名称 | - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Cert(encodingBlob, function (error, x509Cert) { - if (error != null) { - console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("createX509Cert success"); - let subjectAltNames = x509Cert.getSubjectAltNames(); - } -}); -``` - -### getIssuerAltNames - -getIssuerAltNames() : DataArray - -表示获取X509证书颁发者可选名称。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**返回值**: - -| 类型 | 说明 | -| ----------------------- | -------------------------- | -| [DataArray](#dataarray) | 表示X509证书颁发者可选名称 | - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Cert(encodingBlob, function (error, x509Cert) { - if (error != null) { - console.log("createX509Cert failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("createX509Cert success"); - let issuerAltNames = x509Cert.getIssuerAltNames(); - } -}); -``` - -## cryptoFramework.createX509Crl - -createX509Crl(inStream : EncodingBlob, callback : AsyncCallback\) : void - -表示创建X509证书吊销列表的对象。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**参数**: - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | ----------------------------- | ---- | ------------------------------ | -| inStream | [EncodingBlob](#encodingblob) | 是 | 表示证书吊销列表序列化数据 | -| callback | AsyncCallback\ | 是 | 回调函数。表示证书吊销列表对象 | - - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书吊销列表二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Crl(encodingBlob, function (error, x509Crl) { - if (error != null) { - console.log("createX509Crl failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("createX509Crl success"); - } -}); -``` - -## cryptoFramework.createX509Crl - -createX509Crl(inStream : EncodingBlob) : Promise\ - -表示创建X509证书吊销列表的对象。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**参数**: - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | ----------------------------- | ---- | -------------------------- | -| inStream | [EncodingBlob](#encodingblob) | 是 | 表示证书吊销列表序列化数据 | - -**返回值**: - -| 类型 | 说明 | -| ----------------- | -------------------- | -| Promise\ | 表示证书吊销列表对象 | - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书吊销列表二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Crl(encodingBlob).then(x509Crl => { - console.log("createX509Crl success"); -}, error => { - console.log("createX509Crl failed, errCode: " + error.code + ", errMsg: " + error.message); -}); -``` - -## X509Crl - -X509证书吊销列表对象。 - -### isRevoked - -isRevoked(cert : X509Cert, callback : AsyncCallback\) : void - -表示检查证书是否吊销。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**参数**: - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | ----------------------- | ---- | ----------------------------------------------------------- | -| cert | [X509Cert](#x509cert) | 是 | 表示被检查的证书对象 | -| callback | AsyncCallback\ | 是 | 回调函数。表示证书吊销状态,true表示已吊销,false表示未吊销 | - - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书吊销列表二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Crl(encodingBlob, function (error, x509Crl) { - if (error != null) { - console.log("createX509Crl failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("createX509Crl success"); - // 业务需自行生成X509Cert证书对象 - let x509Cert = null; - x509Crl.isRevoked(x509Cert, function (error, isRevoked) { - if (error != null) { - console.log("call isRevoked failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("call isRevoked success"); - } - }); - } -}); -``` - -### isRevoked - -isRevoked(cert : X509Cert) : Promise\ - -表示检查证书是否吊销。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**参数**: - -| 参数名 | 类型 | 必填 | 说明 | -| ------ | -------- | ---- | -------------------- | -| cert | X509Cert | 是 | 表示被检查的证书对象 | - -**返回值**: - -| 类型 | 说明 | -| ----------------- | ------------------------------------------------- | -| Promise\ | 表示证书吊销状态,true表示已吊销,false表示未吊销 | - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书吊销列表二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Crl(encodingBlob).then(x509Crl => { - console.log("createX509Crl success"); - // 业务需自行生成X509Cert证书对象 - let x509Cert = null; - x509Crl.isRevoked(x509Cert).then(isRevoked => { - console.log("call isRevoked success"); - }, error => { - console.log("call isRevoked failed, errCode: " + error.code + ", errMsg: " + error.message); - }); -}, error => { - console.log("createX509Crl failed, errCode: " + error.code + ", errMsg: " + error.message); -}); -``` - -### getType - -getType() : string - -表示获取证书吊销列表类型。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**返回值**: - -| 类型 | 说明 | -| ------ | -------------------- | -| string | 表示证书吊销列表类型 | - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书吊销列表二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Crl(encodingBlob, function (error, x509Crl) { - if (error != null) { - console.log("createX509Crl failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("createX509Crl success"); - let type = x509Crl.getType(); - } -}); -``` - -### getEncoded - -getEncoded(callback : AsyncCallback\) : void - -表示获取X509证书吊销列表的序列化数据。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**参数**: - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | ---------------------------- | ---- | ------------------------------------------ | -| callback | AsyncCallback\ | 是 | 回调函数,表示X509证书吊销列表的序列化数据 | - - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书吊销列表二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Crl(encodingBlob, function (error, x509Crl) { - if (error != null) { - console.log("createX509Crl failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("createX509Crl success"); - x509Crl.getEncoded(function (error, data) { - if (error != null) { - console.log("getEncoded failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("getEncoded success"); - } - }); - } -}); -``` - -### getEncoded - -getEncoded() : Promise\ - -表示获取X509证书吊销列表的序列化数据。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**返回值**: - -| 类型 | 说明 | -| ---------------------- | -------------------------------- | -| Promise\ | 表示X509证书吊销列表的序列化数据 | - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书吊销列表二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Crl(encodingBlob).then(x509Crl => { - console.log("createX509Crl success"); - x509Crl.getEncoded().then(result => { - console.log("getEncoded success"); - }, error => { - console.log("getEncoded failed, errCode: " + error.code + ", errMsg: " + error.message); - }); -}, error => { - console.log("createX509Crl failed, errCode: " + error.code + ", errMsg: " + error.message); -}); -``` - -### verify - -verify(key : PubKey, callback : AsyncCallback\) : void - -表示对X509证书吊销列表进行验签。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**参数**: - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------------------- | ---- | ------------------------------------------------------------ | -| key | PubKey | 是 | 表示用于验签的公钥对象 | -| callback | AsyncCallback\ | 是 | 回调函数,使用AsyncCallback的第一个error参数判断是否验签成功,error为null表示成功,error不为null表示失败。 | - - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书吊销列表二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Crl(encodingBlob, function (error, x509Crl) { - if (error != null) { - console.log("createX509Crl failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("createX509Crl success"); - // 业务需通过AsyKeyGenerator生成PubKey - let pubKey = null; - x509Crl.verify(pubKey, function (error, data) { - if (error != null) { - console.log("verify failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("verify success"); - } - }); - } -}); -``` - -### verify - -verify(key : PubKey) : Promise\ - -表示对X509证书吊销列表进行验签。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**参数**: - -| 参数名 | 类型 | 必填 | 说明 | -| ------ | ----------------- | ---- | ---------------------- | -| key | [PubKey](#pubkey) | 是 | 表示用于验签的公钥对象 | - -**返回值**: - -| 类型 | 说明 | -| -------------- | ------------------------------------------------------------ | -| Promise\ | 使用AsyncCallback的第一个error参数判断是否验签成功,error为null表示成功,error不为null表示失败 | - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书吊销列表二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Crl(encodingBlob).then(x509Crl => { - console.log("createX509Crl success"); - // 业务需通过AsyKeyGenerator生成PubKey - let pubKey = null; - x509Crl.verify(pubKey).then(result => { - console.log("verify success"); - }, error => { - console.log("verify failed, errCode: " + error.code + ", errMsg: " + error.message); - }); -}, error => { - console.log("createX509Crl failed, errCode: " + error.code + ", errMsg: " + error.message); -}); -``` - -### getVersion - -getVersion() : number - -表示获取X509证书吊销列表的版本号。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**返回值**: - -| 类型 | 说明 | -| ------ | -------------------------------- | -| number | 表示获取X509证书吊销列表的版本号 | - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书吊销列表二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Crl(encodingBlob, function (error, x509Crl) { - if (error != null) { - console.log("createX509Crl failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("createX509Crl success"); - let version = x509Crl.getVersion(); - } -}); -``` - -### getIssuerName - -getIssuerName() : DataBlob - -表示获取X509证书吊销列表颁发者名称。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**返回值**: - -| 类型 | 说明 | -| --------------------- | ------------------------------ | -| [DataBlob](#datablob) | 表示X509证书吊销列表颁发者名称 | - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书吊销列表二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Crl(encodingBlob, function (error, x509Crl) { - if (error != null) { - console.log("createX509Crl failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("createX509Crl success"); - let issuerName = x509Crl.getIssuerName(); - } -}); -``` - -### getLastUpdate - -getLastUpdate() : string - -表示获取X509证书吊销列表最后一次更新日期。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**返回值**: - -| 类型 | 说明 | -| ------ | ------------------------------------ | -| string | 表示X509证书吊销列表最后一次更新日期 | - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书吊销列表二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Crl(encodingBlob, function (error, x509Crl) { - if (error != null) { - console.log("createX509Crl failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("createX509Crl success"); - let lastUpdate = x509Crl.getLastUpdate(); - } -}); -``` - -### getNextUpdate - -getNextUpdate() : string - -表示获取证书吊销列表下一次更新的日期。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**返回值**: - -| 类型 | 说明 | -| ------ | ------------------------------------ | -| string | 表示X509证书吊销列表下一次更新的日期 | - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书吊销列表二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Crl(encodingBlob, function (error, x509Crl) { - if (error != null) { - console.log("createX509Crl failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("createX509Crl success"); - let nextUpdate = x509Crl.getNextUpdate(); - } -}); -``` - -### getRevokedCert - -getRevokedCert(serialNumber : number, callback : AsyncCallback\) : void - -表示通过指定证书序列号获取被吊销X509证书对象。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**参数**: - -| 参数名 | 类型 | 必填 | 说明 | -| ------------ | ---------------------------- | ---- | -------------------------------- | -| serialNumber | number | 是 | 表示证书序列号 | -| callback | AsyncCallback\ | 是 | 回调函数。表示被吊销X509证书对象 | - - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书吊销列表二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Crl(encodingBlob, function (error, x509Crl) { - if (error != null) { - console.log("createX509Crl failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("createX509Crl success"); - // 业务需赋值为对应证书的序列号 - let serialNumber = 1000; - x509Crl.getRevokedCert(serialNumber, function (error, entry) { - if (error != null) { - console.log("getRevokedCert failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("getRevokedCert success"); - } - }); - } -}); -``` - -### getRevokedCert - -getRevokedCert(serialNumber : number) : Promise\ - -表示通过指定证书序列号获取被吊销X509证书对象。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**参数**: - -| 参数名 | 类型 | 必填 | 说明 | -| ------------ | ------ | ---- | -------------- | -| serialNumber | number | 是 | 表示证书序列号 | - -**返回值**: - -| 类型 | 说明 | -| ---------------------- | ---------------------- | -| Promise\ | 表示被吊销X509证书对象 | - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书吊销列表二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Crl(encodingBlob).then(x509Crl => { - console.log("createX509Crl success"); - // 业务需赋值为对应证书的序列号 - let serialNumber = 1000; - x509Crl.getRevokedCert(serialNumber).then(entry => { - console.log("getRevokedCert success"); - }, error => { - console.log("getRevokedCert failed, errCode: " + error.code + ", errMsg: " + error.message); - }); -}, error => { - console.log("createX509Crl failed, errCode: " + error.code + ", errMsg: " + error.message); -}); -``` - -### getRevokedCertWithCert - -getRevokedCertWithCert(cert : X509Cert, callback : AsyncCallback\) : void - -表示通过指定证书对象获取被吊销X509证书对象。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**参数**: - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | ---------------------------- | ---- | ------------------------------- | -| cert | X509Cert | 是 | 表示证书对象 | -| callback | AsyncCallback\ | 是 | 回调函数,表示被吊销X509证书对象 | - - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书吊销列表二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Crl(encodingBlob, function (error, x509Crl) { - if (error != null) { - console.log("createX509Crl failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("createX509Crl success"); - // 业务需自行生成X509Cert证书对象 - let x509Cert = null; - x509Crl.getRevokedCertWithCert(x509Cert, function (error, entry) { - if (error != null) { - console.log("getRevokedCertWithCert failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("getRevokedCertWithCert success"); - } - }); - } -}); -``` - -### getRevokedCertWithCert - -getRevokedCertWithCert(cert : X509Cert) : Promise\ - -表示通过指定证书对象获取被吊销X509证书对象。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**参数**: - -| 参数名 | 类型 | 必填 | 说明 | -| ------ | -------- | ---- | ------------ | -| cert | X509Cert | 是 | 表示证书对象 | - -**返回值**: - -| 类型 | 说明 | -| ---------------------- | ---------------------- | -| Promise\ | 表示被吊销X509证书对象 | - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书吊销列表二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Crl(encodingBlob).then(x509Crl => { - console.log("createX509Crl success"); - // 业务需自行生成X509Cert证书对象 - let x509Cert = null; - x509Crl.getRevokedCertWithCert(x509Cert).then(entry => { - console.log("getRevokedCertWithCert success"); - }, error => { - console.log("getRevokedCertWithCert failed, errCode: " + error.code + ", errMsg: " + error.message); - }); -}, error => { - console.log("createX509Crl failed, errCode: " + error.code + ", errMsg: " + error.message); -}); -``` - -### getRevokedCerts - -getRevokedCerts(callback : AsyncCallback>) : void - -表示获取被吊销X509证书列表。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**参数**: - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | ----------------------------------- | ---- | -------------------------------- | -| callback | AsyncCallback> | 是 | 回调函数。表示被吊销X509证书列表 | - - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书吊销列表二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Crl(encodingBlob, function (error, x509Crl) { - if (error != null) { - console.log("createX509Crl failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("createX509Crl success"); - x509Crl.getRevokedCerts(function (error, array) { - if (error != null) { - console.log("getRevokedCerts failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("getRevokedCerts success"); - } - }); - } -}); -``` - -### getRevokedCerts - -getRevokedCerts() : Promise> - -表示获取被吊销X509证书列表。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**返回值**: - -| 类型 | 说明 | -| ----------------------------- | ---------------------- | -| Promise> | 表示被吊销X509证书列表 | - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书吊销列表二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Crl(encodingBlob).then(x509Crl => { - console.log("createX509Crl success"); - x509Crl.getRevokedCerts().then(array => { - console.log("getRevokedCerts success"); - }, error => { - console.log("getRevokedCerts failed, errCode: " + error.code + ", errMsg: " + error.message); - }); -}, error => { - console.log("createX509Crl failed, errCode: " + error.code + ", errMsg: " + error.message); -}); -``` - -### getTbsInfo - -getTbsInfo(callback : AsyncCallback\) : void - -表示获取证书吊销列表的tbsCertList信息。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**参数**: - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | ------------------------------------- | ---- | ------------------------------------------- | -| callback | AsyncCallback\<[DataBlob](#datablob)> | 是 | 回调函数。表示证书吊销列表的tbsCertList信息 | - - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书吊销列表二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Crl(encodingBlob, function (error, x509Crl) { - if (error != null) { - console.log("createX509Crl failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("createX509Crl success"); - x509Crl.getTbsInfo(function (error, tbsInfo) { - if (error != null) { - console.log("getTbsInfo failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("getTbsInfo success"); - } - }); - } -}); -``` - -### getTbsInfo - -getTbsInfo() : Promise\ - -表示获取证书吊销列表的tbsCertList信息。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**返回值**: - -| 类型 | 说明 | -| ------------------------------- | --------------------------------- | -| Promise\<[DataBlob](#datablob)> | 表示证书吊销列表的tbsCertList信息 | - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书吊销列表二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Crl(encodingBlob).then(x509Crl => { - console.log("createX509Crl success"); - x509Crl.getTbsInfo().then(tbsInfo => { - console.log("getTbsInfo success"); - }, error => { - console.log("getTbsInfo failed, errCode: " + error.code + ", errMsg: " + error.message); - }); -}, error => { - console.log("createX509Crl failed, errCode: " + error.code + ", errMsg: " + error.message); -}); -``` - -### getSignature - -getSignature() : DataBlob - -表示获取X509证书吊销列表的签名数据。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**返回值**: - -| 类型 | 说明 | -| --------------------- | ------------------------------ | -| [DataBlob](#datablob) | 表示X509证书吊销列表的签名数据 | - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书吊销列表二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Crl(encodingBlob, function (error, x509Crl) { - if (error != null) { - console.log("createX509Crl failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("createX509Crl success"); - let signature = x509Crl.getSignature(); - } -}); -``` - -### getSignatureAlgName - -getSignatureAlgName() : string - -表示获取X509证书吊销列表签名的算法名称。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**返回值**: - -| 类型 | 说明 | -| ------ | -------------------------------- | -| string | 表示X509证书吊销列表签名的算法名 | - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书吊销列表二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Crl(encodingBlob, function (error, x509Crl) { - if (error != null) { - console.log("createX509Crl failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("createX509Crl success"); - let sigAlgName = x509Crl.getSignatureAlgName(); - } -}); -``` - -### getSignatureAlgOid - -getSignatureAlgOid() : string - -表示获取X509证书吊销列表签名算法的对象标志符OID(Object Identifier)。OID是由国际标准组织(ISO)的名称注册机构分配。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**返回值**: - -| 类型 | 说明 | -| ------ | --------------------------------------------- | -| string | 表示X509证书吊销列表签名算法的对象标志符OID。 | - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书吊销列表二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Crl(encodingBlob, function (error, x509Crl) { - if (error != null) { - console.log("createX509Crl failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("createX509Crl success"); - let sigAlgOid = x509Crl.getSignatureAlgOid(); - } -}); -``` - -### getSignatureAlgParams - -getSignatureAlgParams() : DataBlob - -表示获取X509证书吊销列表签名的算法参数。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**返回值**: - -| 类型 | 说明 | -| --------------------- | ---------------------------------- | -| [DataBlob](#datablob) | 表示X509证书吊销列表签名的算法参数 | - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书吊销列表二进制数据,需业务自行赋值 -let encodingData = null; -let encodingBlob = { - data: encodingData, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -cryptoFramework.createX509Crl(encodingBlob, function (error, x509Crl) { - if (error != null) { - console.log("createX509Crl failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("createX509Crl success"); - let sigAlgParams = x509Crl.getSignatureAlgParams(); - } -}); -``` - -## cryptoFramework.createCertChainValidator - -createCertChainValidator(algorithm :string) : CertChainValidator - -表示创建证书链校验器对象。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**参数**: - -| 参数名 | 类型 | 必填 | 说明 | -| --------- | ------ | ---- | ------------------------------------------ | -| algorithm | string | 是 | 表示证书链校验器算法。当前仅支持输入“PKIX” | - -**返回值**: - -| 类型 | 说明 | -| ------------------ | -------------------- | -| CertChainValidator | 表示证书链校验器对象 | - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -let validator = cryptoFramework.createCertChainValidator("PKIX"); -``` - -## CertChainValidator - -证书链校验器对象。 - - -### 属性 - -**系统能力:** SystemCapability.Security.CryptoFramework - -| 名称 | 类型 | 可读 | 可写 | 说明 | -| ------- | ------ | ---- | ---- | -------------------------- | -| algorithm | string | 是 | 否 | X509证书链校验器算法名称。 | - - -### validate - -validate(certChain : CertChainData, callback : AsyncCallback\) : void - -表示校验X509证书链。 -由于端侧系统时间不可信,证书链校验不包含对证书有效时间的校验。如果需要检查证书的时间有效性,可使用X509证书的[checkValidityWithDate](#checkvaliditywithdate)方法进行检查。详见[证书规格](../../security/cryptoFramework-overview.md#证书规格) - -**系统能力**:SystemCapability.Security.CryptoFramework - -**参数**: - -| 参数名 | 类型 | 必填 | 说明 | -| --------- | ------------------------------- | ---- | ------------------------------------------------------------ | -| certChain | [CertChainData](#certchaindata) | 是 | 表示X509证书链序列化数据 | -| callback | AsyncCallback\ | 是 | 回调函数。使用AsyncCallback的第一个error参数判断是否校验成功,error为null表示成功,error不为null表示失败 | - - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -let validator = cryptoFramework.createCertChainValidator("PKIX"); -// 证书链二进制数据,需业务自行赋值 -let encodingData = null; -// 证书链包含的证书个数,需业务自行赋值 -let certCount = 2; -let certChainData = { - data: encodingData, - count: certCount, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -validator.validate(certChainData, function (error, data) { - if (error != null) { - console.log("validate failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("validate success"); - } -}); -``` - -### validate - -validate(certChain : CertChainData) : Promise\ - -表示校验X509证书链。 -由于端侧系统时间不可信,证书链校验不包含对证书有效时间的校验。如果需要检查证书的时间有效性,可使用X509证书的[checkValidityWithDate](#checkvaliditywithdate)方法进行检查。详见[证书规格](../../security/cryptoFramework-overview.md#证书规格) - -**系统能力**:SystemCapability.Security.CryptoFramework - -**参数**: - -| 参数名 | 类型 | 必填 | 说明 | -| --------- | ------------------------------- | ---- | -------------------------- | -| certChain | [CertChainData](#certchaindata) | 是 | 表示X509证书链序列化数据。 | - -**返回值**: - -| 类型 | 说明 | -| -------------- | ----------- | -| Promise\ | Promise对象 | - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -let validator = cryptoFramework.createCertChainValidator("PKIX"); -// 证书链二进制数据,需业务自行赋值 -let encodingData = null; -// 证书链包含的证书个数,需业务自行赋值 -let certCount = 2; -let certChainData = { - data: encodingData, - count: certCount, - // 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM -}; -validator.validate(certChainData).then(result => { - console.log("validate success"); -}, error => { - console.log("validate failed, errCode: " + error.code + ", errMsg: " + error.message); -}); -``` - - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -let validator = cryptoFramework.createCertChainValidator("PKIX"); -let algorithm = validator.algorithm; -``` - -## X509CrlEntry - -被吊销证书对象。 - -### getEncoded - -getEncoded(callback : AsyncCallback\) : void - -表示获取被吊销证书的序列化数据。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**参数**: - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | --------------------------------------------- | ---- | ------------------------------------ | -| callback | AsyncCallback\<[EncodingBlob](#encodingblob)> | 是 | 回调函数。表示被吊销证书的序列化数据 | - - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 业务需通过X509Crl的getRevokedCert相关方法获取X509CrlEntry -let x509CrlEntry = null; -x509CrlEntry.getEncoded(function (error, data) { - if (error != null) { - console.log("getEncoded failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("getEncoded success"); - } -}); -``` - -### getEncoded - -getEncoded() : Promise\ - -表示获取被吊销证书的序列化数据。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**返回值**: - -| 类型 | 说明 | -| --------------------------------------- | -------------------------- | -| Promise\<[EncodingBlob](#encodingblob)> | 表示被吊销证书的序列化数据 | - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 业务需通过X509Crl的getRevokedCert相关方法获取X509CrlEntry -let x509CrlEntry = null; -x509CrlEntry.getEncoded().then(result => { - console.log("getEncoded success"); -}, error => { - console.log("getEncoded failed, errCode: " + error.code + ", errMsg: " + error.message); -}); -``` - -### getSerialNumber - -getSerialNumber() : number - -表示获取被吊销证书的序列号。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**返回值**: - -| 类型 | 说明 | -| ------ | ---------------------- | -| number | 表示被吊销证书的序列号 | - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 业务需通过X509Crl的getRevokedCert相关方法获取X509CrlEntry -let x509CrlEntry = null; -let serialNumber = x509CrlEntry.getSerialNumber(); -``` - -### getCertIssuer - -getCertIssuer(callback : AsyncCallback\) : void - -表示获取被吊销证书的颁发者信息。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**参数**: - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | ------------------------------------- | ---- | ------------------------------------ | -| callback | AsyncCallback\<[DataBlob](#datablob)> | 是 | 回调函数。表示被吊销证书的颁发者信息 | - - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 业务需通过X509Crl的getRevokedCert相关方法获取X509CrlEntry -let x509CrlEntry = null; -x509CrlEntry.getCertIssuer(function (error, issuer) { - if (error != null) { - console.log("getCertIssuer failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("getCertIssuer success"); - } -}); -``` - -### getCertIssuer - -getCertIssuer() : Promise\ - -表示获取被吊销证书的颁发者信息。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**返回值**: - -| 类型 | 说明 | -| ------------------------------- | -------------------------- | -| Promise\<[DataBlob](#datablob)> | 表示被吊销证书的颁发者信息 | - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 业务需通过X509Crl的getRevokedCert相关方法获取X509CrlEntry -let x509CrlEntry = null; -x509CrlEntry.getCertIssuer().then(issuer => { - console.log("getCertIssuer success"); -}, error => { - console.log("getCertIssuer failed, errCode: " + error.code + ", errMsg: " + error.message); -}); -``` - -### getRevocationDate - -getRevocationDate(callback : AsyncCallback\) : void - -表示获取证书被吊销的日期。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**参数**: - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | ---------------------- | ---- | ------------------------------ | -| callback | AsyncCallback\ | 是 | 回调函数。表示证书被吊销的日期 | - - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 业务需通过X509Crl的getRevokedCert相关方法获取X509CrlEntry -let x509CrlEntry = null; -x509CrlEntry.getRevocationDate(function (error, date) { - if (error != null) { - console.log("getRevocationDate failed, errCode: " + error.code + ", errMsg: " + error.message); - } else { - console.log("getRevocationDate success"); - } -}); -``` - -### getRevocationDate - -getRevocationDate() : Promise\ - -表示获取证书被吊销的日期。 - -**系统能力**:SystemCapability.Security.CryptoFramework - -**返回值**: - -| 类型 | 说明 | -| ---------------- | -------------------- | -| Promise\ | 表示证书被吊销的日期 | - -**示例**: - -```js -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 业务需通过X509Crl的getRevokedCert相关方法获取X509CrlEntry -let x509CrlEntry = null; -x509CrlEntry.getRevocationDate().then(date => { - console.log("getRevocationDate success"); -}, error => { - console.log("getRevocationDate failed, errCode: " + error.code + ", errMsg: " + error.message); -}); -``` diff --git a/zh-cn/application-dev/reference/errorcodes/errorcode-cert.md b/zh-cn/application-dev/reference/errorcodes/errorcode-cert.md new file mode 100755 index 0000000000000000000000000000000000000000..d74648af4d4ad600f10018a4f8aacb195b4d6d0d --- /dev/null +++ b/zh-cn/application-dev/reference/errorcodes/errorcode-cert.md @@ -0,0 +1,133 @@ +# cert错误码 + +## 19020001 内存错误 + +**错误信息** + +Memory error. + +**可能原因** + +当前系统内存分配失败。 + +**处理步骤** + +1. 检查当前系统功能是否正常。 +2. 业务检查数据是否超长,导致系统无法分配内存。 + +## 19020002 运行时错误 + +**错误信息** + +Runtime error. + +**可能原因** + +系统出现的不可预料的错误。 + +**处理步骤** + +检查当前系统功能是否正常。 + +## 19030001 算法相关的操作错误,调用三方算法库API出错 + +**错误信息** + +Crypto operation error. + +**可能原因** + +加解密算法框架与三方算法库交互时,出现错误。 + +**处理步骤** + +1. 检查输入参数的正确性。 +2. 检查三方算法库功能是否正常。 + +## 19030002 证书签名验证错误 + +**错误信息** + +The certificate signature verification failed. + +**可能原因** + +证书校验过程中,证书的签名信息不对。 + +**处理步骤** + +检查证书的正确性。 + +## 19030003 证书尚未生效 + +**错误信息** + +The certificate has not taken effect. + +**可能原因** + +证书尚未生效。证书的生效时间晚于当前系统时间或者业务指定的时间点。 + +**处理步骤** + +1. 检查证书的正确性。 +2. 检查获取的系统时间是否正确。 +3. 与当前系统时间进行比对,检查证书的生效时间。 + +## 19030004 证书过期 + +**错误信息** + +The certificate has expired. + +**可能原因** + +证书失效。基于当前系统时间或者业务指定的时间点,证书已经失效。 + +**处理步骤** + +1. 检查证书的正确性。 +2. 检查获取的系统时间是否正确。 +3. 与当前系统时间进行比对,检查证书的失效时间。 + +## 19030005 无法获取证书的颁发者 + +**错误信息** + +Failed to obtain the certificate issuer. + +**可能原因** + +证书校验过程中,无法获取当前证书的颁发者。 + +**处理步骤** + +检查证书的正确性。 + +## 19030006 证书的秘钥用途不包括证书签名 + +**错误信息** + +The key cannot be used for signing a certificate. + +**可能原因** + +证书的秘钥用途不包括证书签名。 + +**处理步骤** + +检查证书的正确性。 + +## 19030007 证书的秘钥用途不包括数字签名 + +**错误信息** + +The key cannot be used for digital signature. + +**可能原因** + +证书的秘钥用途不包括数字签名。 + +**处理步骤** + +检查证书的正确性。 \ No newline at end of file diff --git a/zh-cn/application-dev/reference/errorcodes/errorcode-crypto-framework.md b/zh-cn/application-dev/reference/errorcodes/errorcode-crypto-framework.md new file mode 100755 index 0000000000000000000000000000000000000000..5795b9b30ebd9de96559da6c73075d4fdeb18a0c --- /dev/null +++ b/zh-cn/application-dev/reference/errorcodes/errorcode-crypto-framework.md @@ -0,0 +1,45 @@ +# crypto framework错误码 + +## 17620001 内存错误 + +**错误信息** + +Memory error. + +**可能原因** + +当前系统内存分配失败。 + +**处理步骤** + +1. 检查当前系统功能是否正常。 +2. 业务检查数据是否超长,导致系统无法分配内存。 + +## 17620002 运行时错误 + +**错误信息** + +Runtime error. + +**可能原因** + +系统出现的不可预料的错误。 + +**处理步骤** + +检查当前系统功能是否正常。 + +## 17630001 算法相关的操作错误,调用三方算法库API出错 + +**错误信息** + +Crypto operation error. + +**可能原因** + +加解密算法框架与三方算法库交互时,出现错误。 + +**处理步骤** + +1. 检查输入参数的正确性。 +2. 检查三方算法库功能是否正常。 \ No newline at end of file diff --git a/zh-cn/application-dev/security/cert-guidelines.md b/zh-cn/application-dev/security/cert-guidelines.md new file mode 100755 index 0000000000000000000000000000000000000000..3af71a00098d37037564708aa7039348dc62158f --- /dev/null +++ b/zh-cn/application-dev/security/cert-guidelines.md @@ -0,0 +1,464 @@ +# 证书开发指导 + +> **说明** +> +> 本开发指导基于API version 9,OH SDK版本3.2.9及以上,适用于JS语言开发 + +## 使用证书操作 + +**场景说明** + +使用证书操作中,典型的场景有: + +1. 解析X509证书数据生成证书对象。 +2. 获取证书信息,比如:证书版本、证书序列号等。 +3. 获取证书对象的序列化数据。 +4. 获取证书公钥。 +5. 证书验签。 +6. 校验证书有效期。 + +**接口及参数说明** + +详细接口说明可参考[API参考](../reference/apis/js-apis-cert.md)。 + +以上场景涉及的常用接口如下表所示: + +| 实例名 | 接口名 | 描述 | +| --------------- | ------------------------------------------------------------ | -------------------------------------------- | +| cryptoCert | createX509Cert(inStream : EncodingBlob, callback : AsyncCallback\) : void | 使用callback方式解析X509证书数据生成证书对象 | +| cryptoCert | createX509Cert(inStream : EncodingBlob) : Promise\ | 使用promise方式解析X509证书数据生成证书对象 | +| X509Cert | verify(key : cryptoFramework.PubKey, callback : AsyncCallback\) : void | 使用callback方式进行证书验签 | +| X509Cert | verify(key : cryptoFramework.PubKey) : Promise\ | 使用promise方式进行证书验签 | +| X509Cert | getEncoded(callback : AsyncCallback\) : void | 使用callback方式获取证书序列化数据 | +| X509Cert | getEncoded() : Promise\ | 使用promise方式获取证书序列化数据 | +| X509Cert | getPublicKey() : cryptoFramework.PubKey | 获取证书公钥 | +| X509Cert | checkValidityWithDate(date: string) : void | 校验证书有效期 | +| X509Cert | getVersion() : number | 获取证书版本 | +| X509Cert | getSerialNumber() : number | 获取证书序列号 | +| X509Cert | getIssuerName() : DataBlob | 获取证书颁发者名称 | +| X509Cert | getSubjectName() : DataBlob | 获取证书主体名称 | +| X509Cert | getNotBeforeTime() : string | 获取证书有效期起始时间 | +| X509Cert | getNotAfterTime() : string | 获取证书有效期截至时间 | +| X509Cert | getSignature() : DataBlob | 获取证书签名 | +| X509Cert | getSignatureAlgName() : string | 获取证书签名算法名称 | +| X509Cert | getSignatureAlgOid() : string | 获取证书签名算法OID | +| X509Cert | getSignatureAlgParams() : DataBlob | 获取证书签名算法参数 | +| X509Cert | getKeyUsage() : DataBlob | 获取证书秘钥用途 | +| X509Cert | getExtKeyUsage() : DataArray | 获取证书扩展秘钥用途 | +| X509Cert | getBasicConstraints() : number | 获取证书基本约束 | +| X509Cert | getSubjectAltNames() : DataArray | 获取证书主体可选名称 | +| X509Cert | getIssuerAltNames() : DataArray | 获取证书颁发者可选名称 | + +**开发步骤** + +示例:解析X509证书数据生成证书对象,并调用对象方法(包含场景1-6) + +```javascript +import cryptoCert from '@ohos.security.cert'; +import cryptoFramework from '@ohos.security.cryptoFramework'; + +// 证书数据,此处仅示例,业务需根据场景自行设置 +let certData = "-----BEGIN CERTIFICATE-----\n" ++ "IBzTCCAXCgAwIBAgIGAXKnMKNyMAwGCCqBHM9VAYN1BQAwSTELMAkGA1UEBhMC\n" ++ "04xDjAMBgNVBAoTBUdNU1NMMRAwDgYDVQQLEwdQS0kvU00yMRgwFgYDVQQDEw9S\n" ++ "290Q0EgZm9yIFRlc3QwIhgPMjAxNTEyMzExNjAwMDBaGA8yMDM1MTIzMDE2MDAw\n" ++ "FowSTELMAkGA1UEBhMCQ04xDjAMBgNVBAoTBUdNU1NMMRAwDgYDVQQLEwdQS0kv\n" ++ "00yMRgwFgYDVQQDEw9Sb290Q0EgZm9yIFRlc3QwWTATBgcqhkjOPQIBBggqgRzP\n" ++ "QGCLQNCAATj+apYlL+ddWXZ7+mFZXZJGbcJFXUN+Fszz6humeyWZP4qEEr2N0+a\n" ++ "dwo/21ft232yo0jPLzdscKB261zSQXSoz4wPDAZBgNVHQ4EEgQQnGnsD7oaOcWv\n" ++ "CTrspwSBDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIAxjAMBggqgRzP\n" ++ "QGDdQUAA0kAMEYCIQCEnW5BlQh0vmsOLxSoXYc/7zs++wWyFc1tnBHENR4ElwIh\n" ++ "I1Lwu6in1ruflZhzseWulXwcITf3bm/Y5X1g1XFWQUH\n" ++ "-----END CERTIFICATE-----\n"; + +// string转Uint8Array +function stringToUint8Array(str) { + var arr = []; + for (var i = 0, j = str.length; i < j; i++) { + arr.push(str.charCodeAt(i)); + } + return new Uint8Array(arr); +} + +// 证书示例 +function certSample() { + let encodingBlob = { + // 将string类型证书数据转为Uint8Array + data: stringToUint8Array(certData), + // 证书格式:支持PEM和DER,此例中对应PEM + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM + }; + + // 创建证书对象 + cryptoCert.createX509Cert(encodingBlob, function (err, x509Cert) { + if (err != null) { + // 创建证书对象失败 + console.log("createX509Cert failed, errCode: " + err.code + ", errMsg: " + err.message); + return; + } + // 创建证书对象成功 + console.log("createX509Cert success"); + + // 获取证书版本 + let version = x509Cert.getVersion(); + + // 获取证书对象的序列化数据 + x509Cert.getEncoded(function (err, data) { + if (err != null) { + // 获取序列化数据失败 + console.log("getEncoded failed, errCode: " + err.code + ", errMsg: " + err.message); + } else { + // 获取序列化数据成功 + console.log("getEncoded success"); + } + }); + + // 业务需通过上级证书对象或本证书对象(自签名)的getPublicKey接口获取公钥对象,此处省略 + let pubKey = null; + try { + pubKey = x509Cert.getPublicKey(); + } catch (error) { + console.log("getPublicKey failed, errCode: " + error.code + ", errMsg: " + error.message); + } + + // 证书验签 + x509Cert.verify(pubKey, function (err, data) { + if (err == null) { + // 验签成功 + console.log("verify success"); + } else { + // 验签失败 + console.log("verify failed, errCode: " + err.code + ", errMsg: " + err.message); + } + }); + + // 时间字符串 + let date = "150527000001Z"; + + // 校验证书有效期 + try { + x509Cert.checkValidityWithDate(date); + } catch (error) { + console.log("checkValidityWithDate failed, errCode: " + error.code + ", errMsg: " + error.message); + } + }); +} +``` + +## 使用证书吊销列表操作 + +**场景说明** + +使用证书吊销列表操作中,典型的场景有: + +1. 解析X509证书吊销列表数据生成吊销列表对象。 +2. 获取证书吊销列表信息,比如:证书吊销列表版本、证书吊销列表类型等。 +3. 获取证书吊销列表对象的序列化数据。 +4. 检查证书是否被吊销。 +5. 证书吊销列表验签。 +6. 获取被吊销证书。 + +**接口及参数说明** + +详细接口说明可参考[API参考](../reference/apis/js-apis-cert.md)。 + +以上场景涉及的常用接口如下表所示: + +| 实例名 | 接口名 | 描述 | +| --------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | +| cryptoCert | createX509Crl(inStream : EncodingBlob, callback : AsyncCallback\) : void | 使用callback方式解析X509证书吊销列表数据生成证书吊销列表对象 | +| cryptoCert | createX509Crl(inStream : EncodingBlob) : Promise\ | 使用promise方式解析X509证书吊销列表数据生成证书吊销列表对象 | +| X509Crl | isRevoked(cert : X509Cert) : boolean | 检查证书是否被吊销 | +| X509Crl | getType() : string | 获取证书吊销列表类型 | +| X509Crl | getEncoded(callback : AsyncCallback\) : void | 使用callback方式获取证书吊销列表序列化数据 | +| X509Crl | getEncoded() : Promise\ | 使用promise方式获取证书吊销列表序列化数据 | +| X509Crl | verify(key : cryptoFramework.PubKey, callback : AsyncCallback\) : void | 使用callback方式进行证书吊销列表验签 | +| X509Crl | verify(key : cryptoFramework.PubKey) : Promise\ | 使用Promise方式进行证书吊销列表验签 | +| X509Crl | getVersion() : number | 获取证书吊销列表版本 | +| X509Crl | getIssuerName() : DataBlob | 获取证书吊销列表颁发者名称 | +| X509Crl | getLastUpdate() : string | 获取证书吊销列表lastUpdate日期 | +| X509Crl | getNextUpdate() : string | 获取证书吊销列表nextUpdate日期 | +| X509Crl | getRevokedCert(serialNumber : number) : X509CrlEntry | 通过序列号获取证书吊销列表中的被吊销证书 | +| X509Crl | getRevokedCertWithCert(cert : X509Cert) : X509CrlEntry | 通过X509证书获取证书吊销列表中的被吊销证书 | +| X509Crl | getRevokedCerts(callback : AsyncCallback\>) : void | 使用callback方式获取证书吊销列表的所有被吊销证书 | +| X509Crl | getRevokedCerts() : Promise\> | 使用Promise方式获取证书吊销列表的所有被吊销证书 | +| X509Crl | getTbsInfo() : DataBlob | 获取证书吊销列表的tbsCertList | +| X509Crl | getSignature() : DataBlob | 获取证书吊销列表的签名 | +| X509Crl | getSignatureAlgName() : string | 获取证书吊销列表的签名算法名称 | +| X509Crl | getSignatureAlgOid() : string | 获取证书吊销列表的签名算法OID | +| X509Crl | getSignatureAlgParams() : DataBlob | 获取证书吊销列表的签名算法参数 | + +**开发步骤** + +示例:解析X509证书吊销列表数据生成证书吊销列表对象,并调用对象方法(包含场景1-6) + +```javascript +import cryptoCert from '@ohos.security.cert'; +import cryptoFramework from '@ohos.security.cryptoFramework'; + +// 证书吊销列表数据,此处仅示例,业务需根据场景自行设置 +let crlData = "-----BEGIN X509 CRL-----\n" ++ "MIIBijB0AgEBMA0GCSqGSIb3DQEBCwUAMBMxETAPBgNVBAMMCHJvb3QtY2ExFw0y\n" ++ "MDA2MTkxNjE1NDhaFw0yMDA3MTkxNjE1NDhaMBwwGgIJAMsozRATnap1Fw0yMDA2\n" ++ "MTkxNjEyMDdaoA8wDTALBgNVHRQEBAICEAIwDQYJKoZIhvcNAQELBQADggEBACPs\n" ++ "9gQB+djaXPHHRmAItebZpD3iJ/e36Dxr6aMVkn9FkI8OVpUI4RNcCrywyCZHQJte\n" ++ "995bbPjP7f1sZstOTZS0fDPgJ5SPAxkKOQB+SQnBFrlZSsxoUNU60gRqd2imR0Rn\n" ++ "1r09rP69F6E4yPc9biEld+llLGgoImP3zPOVDD6fbfcvVkjStY3bssVEQ/vjp4a3\n" ++ "/I12U7ZnSe3jaKqaQBoVJppkTFOIOq7IOxf5/IkMPmvRHDeC2IzDMzcUxym0dkny\n" ++ "EowHrjzo0bZVqpHMA2YgKZuwTpVLHk9GeBEK2hVkIoPVISkmiU4HFg0S6z68C5yd\n" ++ "DrAA7hErVgXhtURLbAI=\n" ++ "-----END X509 CRL-----\n"; + +// string转Uint8Array +function stringToUint8Array(str) { + var arr = []; + for (var i = 0, j = str.length; i < j; i++) { + arr.push(str.charCodeAt(i)); + } + return new Uint8Array(arr); +} + +// 证书吊销列表示例 +function crlSample() { + let encodingBlob = { + // 将string类型证书吊销列表数据转为Uint8Array + data: stringToUint8Array(crlData), + // 证书吊销列表格式:支持PEM和DER,此例中对应PEM + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM + }; + + // 创建证书吊销列表对象 + cryptoCert.createX509Crl(encodingBlob, function (err, x509Crl) { + if (err != null) { + // 创建证书吊销列表对象失败 + console.log("createX509Crl failed, errCode: " + err.code + ", errMsg: " + err.message); + return; + } + // 创建证书吊销列表对象成功 + console.log("createX509Crl success"); + + // 获取证书吊销列表版本 + let version = x509Crl.getVersion(); + + // 获取证书吊销列表对象的序列化数据 + x509Crl.getEncoded(function (err, data) { + if (err != null) { + // 获取序列化数据失败 + console.log("getEncoded failed, errCode: " + err.code + ", errMsg: " + err.message); + } else { + // 获取序列化数据成功 + console.log("getEncoded success"); + } + }); + + // 业务需通过cryptoFramework的createX509Cert生成X509Cert证书对象,此处省略 + let x509Cert = null; + // 检查证书是否被吊销 + try { + let revokedFlag = x509Crl.isRevoked(x509Cert); + } catch (error) { + console.log("isRevoked failed, errCode: " + error.code + ", errMsg: " + error.message); + } + + // 业务需通过AsyKeyGenerator的generateKeyPair或convertKey接口获取PubKey对象,此处省略 + let pubKey = null; + + // 证书吊销列表验签 + x509Crl.verify(pubKey, function (err, data) { + if (err == null) { + // 验签成功 + console.log("verify success"); + } else { + // 验签失败 + console.log("verify failed, errCode: " + err.code + ", errMsg: " + err.message); + } + }); + + // 证书序列号,业务需自行设置 + let serialNumber = 1000; + + // 获取被吊销证书对象 + try { + let entry = x509Crl.getRevokedCert(serialNumber); + } catch (error) { + console.log("getRevokedCert failed, errCode: " + error.code + ", errMsg: " + error.message); + } + }); +} +``` + +## 使用证书链校验器操作 + +**场景说明** + +使用证书链校验器操作中,典型的场景:证书链校验。 + +**接口及参数说明** + +详细接口说明可参考[API参考](../reference/apis/js-apis-cert.md)。 + +以上场景涉及的常用接口如下表所示: + +| 实例名 | 接口名 | 描述 | +| ------------------ | ------------------------------------------------------------ | -------------------------------- | +| cryptoCert | createCertChainValidator(algorithm :string) : CertChainValidator | 使用指定算法生成证书链校验器对象 | +| CertChainValidator | validate(certChain : CertChainData, callback : AsyncCallback\) : void | 使用callback方式校验证书链 | +| CertChainValidator | validate(certChain : CertChainData) : Promise\ | 使用promise方式校验证书链 | +| CertChainValidator | algorithm : string | 证书链校验器算法名称 | + +**开发步骤** + +示例:创建证书链校验器对象,并对证书链数据进行校验(场景1) + +```javascript +import cryptoCert from '@ohos.security.cert'; + +// 一级证书数据,此处仅示例,业务需自行设置真实数据 +let caCertData = "-----BEGIN CERTIFICATE-----\n" ++ "...\n" ++ "...\n" ++ "...\n" ++ "-----END CERTIFICATE-----\n"; + +// 二级证书数据,此处仅示例,业务需自行设置真实数据 +let secondCaCertData = "-----BEGIN CERTIFICATE-----\n" ++ "...\n" ++ "...\n" ++ "...\n" ++ "-----END CERTIFICATE-----\n"; + +// string转Uint8Array +function stringToUint8Array(str) { + var arr = []; + for (var i = 0, j = str.length; i < j; i++) { + arr.push(str.charCodeAt(i)); + } + return new Uint8Array(arr); +} + +// 证书链校验器示例:此示例中以校验二级证书链为例,业务需根据场景自行修改 +function certChainValidatorSample() { + // 证书链校验器算法,当前仅支持PKIX + let algorithm = "PKIX"; + + // 创建证书链校验器对象 + let validator = cryptoCert.createCertChainValidator(algorithm); + + // 一级证书数据 + let uint8ArrayOfCaCertData = stringToUint8Array(caCertData); + + // 一级证书数据长度 + let uint8ArrayOfCaCertDataLen = new Uint8Array(new Uint16Array([uint8ArrayOfCaCertData.byteLength]).buffer); + + // 二级证书数据 + let uint8ArrayOf2ndCaCertData = stringToUint8Array(secondCaCertData); + + // 二级证书数据长度 + let uint8ArrayOf2ndCaCertDataLen = new Uint8Array(new Uint16Array([uint8ArrayOf2ndCaCertData.byteLength]).buffer); + + // 证书链二进制数据:二级证书数据长度+二级证书数据+一级证书数据长度+一级证书数据(L-V格式) + let encodingData = new Uint8Array(uint8ArrayOf2ndCaCertDataLen.length + uint8ArrayOf2ndCaCertData.length + + uint8ArrayOfCaCertDataLen.length + uint8ArrayOfCaCertData.length); + for (var i = 0; i < uint8ArrayOf2ndCaCertDataLen.length; i++) { + encodingData[i] = uint8ArrayOf2ndCaCertDataLen[i]; + } + for (var i = 0; i < uint8ArrayOf2ndCaCertData.length; i++) { + encodingData[uint8ArrayOf2ndCaCertDataLen.length + i] = uint8ArrayOf2ndCaCertData[i]; + } + for (var i = 0; i < uint8ArrayOfCaCertDataLen.length; i++) { + encodingData[uint8ArrayOf2ndCaCertDataLen.length + uint8ArrayOf2ndCaCertData.length + i] = uint8ArrayOfCaCertDataLen[i]; + } + for (var i = 0; i < uint8ArrayOfCaCertData.length; i++) { + encodingData[uint8ArrayOf2ndCaCertDataLen.length + uint8ArrayOf2ndCaCertData.length + + uint8ArrayOfCaCertDataLen.length + i] = uint8ArrayOfCaCertData[i]; + } + + let certChainData = { + // Uint8Array类型:L-V格式(证书数据长度-证书数据) + data: encodingData, + // 证书数量,此示例中为2 + count: 2, + // 证书格式:支持PEM和DER,此例中对应PEM + encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM + }; + + // 校验证书链 + validator.validate(certChainData, function (err, data) { + if (err != null) { + // 证书链校验失败 + console.log("validate failed, errCode: " + err.code + ", errMsg: " + err.message); + } else { + // 证书链校验成功 + console.log("validate success"); + } + }); +} +``` + +## 使用被吊销证书操作 + +**场景说明** + +使用被吊销证书操作中,典型的场景有: + +1. 获取被吊销证书对象。 +2. 获取被吊销证书信息,比如:序列号、证书颁发者、证书吊销日期。 +3. 获取被吊销证书对象的序列化数据。 + +**接口及参数说明** + +详细接口说明可参考[API参考](../reference/apis/js-apis-cert.md)。 + +以上场景涉及的常用接口如下表所示: + +| 实例名 | 接口名 | 描述 | +| ------------ | ----------------------------------------------------------- | ---------------------------------------- | +| X509CrlEntry | getEncoded(callback : AsyncCallback\) : void; | 使用callback方式获取被吊销证书的序列化数据 | +| X509CrlEntry | getEncoded() : Promise\; | 使用promise方式获取被吊销证书的序列化数据 | +| X509CrlEntry | getSerialNumber() : number; | 获取被吊销证书的序列号 | +| X509CrlEntry | getCertIssuer() : DataBlob; | 获取被吊销证书颁发者 | +| X509CrlEntry | getRevocationDate() : string; | 获取被吊销证书的吊销日期 | + +**开发步骤** + +示例:获取被吊销证书对象,并调用对象方法(包含场景1-3) + +```javascript +import cryptoCert from '@ohos.security.cert'; + +// 被吊销证书示例 +function crlEntrySample() { + // 业务需自行通过cryptoFramework的createX509Crl接口创建X509Crl对象,此处省略 + let x509Crl = null; + + // 获取被吊销证书对象,业务需根据场景调用X509Crl的接口获取,此示例使用getRevokedCert获取 + let serialNumber = 1000; + let crlEntry = null; + try { + crlEntry = x509Crl.getRevokedCert(serialNumber); + } catch (error) { + console.log("getRevokedCert failed, errCode: " + error.code + ", errMsg: " + error.message); + } + + // 获取被吊销证书的序列号 + let serialNumber = crlEntry.getSerialNumber(); + + // 获取被吊销证书的吊销日期 + try { + crlEntry.getRevocationDate(); + } catch (error) { + console.log("getRevocationDate failed, errCode: " + error.code + ", errMsg: " + error.message); + } + + // 获取被吊销证书对象的序列化数据 + crlEntry.getEncoded(function (err, data) { + if (err != null) { + // 获取序列化数据失败 + console.log("getEncoded failed, errCode: " + err.code + ", errMsg: " + err.message); + } else { + // 获取序列化数据成功 + console.log("getEncoded success"); + } + }); +} +``` diff --git a/zh-cn/application-dev/security/cert-overview.md b/zh-cn/application-dev/security/cert-overview.md new file mode 100755 index 0000000000000000000000000000000000000000..2f2c9fd764a9cb605f41e3d2736f91efdd5ca1ea --- /dev/null +++ b/zh-cn/application-dev/security/cert-overview.md @@ -0,0 +1,24 @@ +# 证书概述 +提供X509证书相关的功能。开发者可以通过调用该系统能力,实现迅捷开发。 + +## 证书基本概念 + +数字证书提供了一种数字验证用户、设备、业务身份的方式。X509证书是国际定制的标准格式。加解密算法库框架部件提供X509证书、X509证书吊销列表、证书链校验器相关的功能。 + +- X509证书:提供X509证书的解析、序列化、X509证书签名验证、证书相关的信息查询等功能 +- X509证书吊销列表:提供X509证书吊销列表的解析、序列化、信息查询等功能 +- 证书链校验器:提供证书链校验(不包括证书有效期的校验)、证书链算法名称查询的功能 + +## 约束与限制 + +- 不支持多线程并发操作。 + +### 证书规格 + +- **证书链校验**
+ + 由于端侧系统时间不可信,证书链校验不包含对证书有效时间的校验。如果需要检查证书的时间有效性,可使用X509证书的checkValidityWithDate()方法进行检查。 + +- **证书格式** + + 目前支持DER与PEM格式的证书。 diff --git a/zh-cn/application-dev/security/cryptoFramework-guidelines.md b/zh-cn/application-dev/security/cryptoFramework-guidelines.md index d4f34d7421fd77a54ba7a17408c252f6696cb4ec..562bef2ff66b8f961190f2bd1027496ffa4fa793 100644 --- a/zh-cn/application-dev/security/cryptoFramework-guidelines.md +++ b/zh-cn/application-dev/security/cryptoFramework-guidelines.md @@ -2,7 +2,7 @@ > **说明** > -> 本开发指导基于API version 9,OH SDK版本3.2.7.3,适用于JS语言开发 +> 本开发指导基于API version 9,OH SDK版本3.2.7以上,适用于JS语言开发 ## 使用密钥对象生成与转换操作 @@ -1055,10 +1055,9 @@ function doHmacByCallback(algName) { | 实例名 | 接口名 | 描述 | | --------------- | ------------------------------------------------------------ | ---------------------------------------------- | | cryptoFramework | function createRandom() : Random; | 生成随机数Random实例 | -| Random | generateRandom(len : number, callback: AsyncCallback\) : void; | 接受输入长度,通过Callback,异步生成随机数 | +| Random | generateRandom(len : number, callback: AsyncCallback\) : void; | 接受输入长度,通过Callback,异步生成随机数 | | Random | generateRandom(len : number) : Promise\; | 接受输入长度,通过Promise,异步生成随机数 | -| Random | setSeed(seed : DataBlob, callback : AsyncCallback\) : void; | 接受输入Blob,通过Callback的方式,异步设置种子 | -| Random | setSeed(seed : DataBlob) : Promise\; | 接受输入Blob,通过Promise的方式,异步设置种子 | +| Random | setSeed(seed : DataBlob) : void; | 接受输入Blob,设置种子 | **开发步骤** @@ -1080,10 +1079,11 @@ function doRandByPromise(len) { var promiseGenerateRand = rand.generateRandom(len); promiseGenerateRand.then(randData => { console.error("[Promise]: rand result: " + randData.data); - var promiseSetSeed = rand.setSeed(randData); - return promiseSetSeed; - }).then(() => { - console.error("[Promise]: setSeed success"); + try { + rand.setSeed(randData); + } catch (error) { + console.log("setSeed failed, errCode: " + error.code + ", errMsg: " + error.message); + } }).catch(error => { console.error("[Promise]: error: " + error.message); }); @@ -1102,507 +1102,12 @@ function doRandByCallback(len) { console.error("[Callback]: err: " + err.code); } else { console.error("[Callback]: generate random result: " + randData.data); - rand.setSeed(randData, (err1,) => { - if (err1) { - console.error("[Callback] err: " + err1.code); - } else { - console.error("[Callback]: setSeed success"); - } - }); + try { + rand.setSeed(randData); + } catch (error) { + console.log("setSeed failed, errCode: " + error.code + ", errMsg: " + error.message); + } } }); } ``` - -## 使用证书操作 - -**场景说明** - -使用证书操作中,典型的场景有: - -1. 解析X509证书数据生成证书对象。 -2. 获取证书信息,比如:证书版本、证书序列号等。 -3. 获取证书对象的序列化数据。 -4. 获取证书公钥。 -5. 证书验签。 -6. 校验证书有效期。 - -**接口及参数说明** - -详细接口说明可参考[API参考](../reference/apis/js-apis-cryptoFramework.md)。 - -以上场景涉及的常用接口如下表所示: - -| 实例名 | 接口名 | 描述 | -| --------------- | ------------------------------------------------------------ | -------------------------------------------- | -| cryptoFramework | createX509Cert(inStream : EncodingBlob, callback : AsyncCallback\) : void | 使用callback方式解析X509证书数据生成证书对象 | -| cryptoFramework | createX509Cert(inStream : EncodingBlob) : Promise\ | 使用promise方式解析X509证书数据生成证书对象 | -| X509Cert | verify(key : PubKey, callback : AsyncCallback\) : void | 使用callback方式进行证书验签 | -| X509Cert | verify(key : PubKey) : Promise\ | 使用promise方式进行证书验签 | -| X509Cert | getEncoded(callback : AsyncCallback\) : void | 使用callback方式获取证书序列化数据 | -| X509Cert | getEncoded() : Promise\ | 使用promise方式获取证书序列化数据 | -| X509Cert | getPublicKey(callback : AsyncCallback\) : void | 使用callback方式获取证书公钥 | -| X509Cert | getPublicKey() : Promise\ | 使用Promise方式获取证书公钥 | -| X509Cert | checkValidityWithDate(date: string, callback : AsyncCallback\) : void | 使用callback方式校验证书有效期 | -| X509Cert | checkValidityWithDate(date: string) : Promise\ | 使用Promise方式校验证书有效期 | -| X509Cert | getVersion() : number | 获取证书版本 | -| X509Cert | getSerialNumber() : number | 获取证书序列号 | -| X509Cert | getIssuerName() : DataBlob | 获取证书颁发者名称 | -| X509Cert | getSubjectName() : DataBlob | 获取证书主体名称 | -| X509Cert | getNotBeforeTime() : string | 获取证书有效期起始时间 | -| X509Cert | getNotAfterTime() : string | 获取证书有效期截至时间 | -| X509Cert | getSignature() : DataBlob | 获取证书签名 | -| X509Cert | getSignatureAlgName() : string | 获取证书签名算法名称 | -| X509Cert | getSignatureAlgOid() : string | 获取证书签名算法OID | -| X509Cert | getSignatureAlgParams() : DataBlob | 获取证书签名算法参数 | -| X509Cert | getKeyUsage() : DataBlob | 获取证书秘钥用途 | -| X509Cert | getExtKeyUsage() : DataArray | 获取证书扩展秘钥用途 | -| X509Cert | getBasicConstraints() : number | 获取证书基本约束 | -| X509Cert | getSubjectAltNames() : DataArray | 获取证书主体可选名称 | -| X509Cert | getIssuerAltNames() : DataArray | 获取证书颁发者可选名称 | - -**开发步骤** - -示例:解析X509证书数据生成证书对象,并调用对象方法(包含场景1-6) - -```javascript -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书数据,此处仅示例,业务需根据场景自行设置 -let certData = "-----BEGIN CERTIFICATE-----\n" -+ "IBzTCCAXCgAwIBAgIGAXKnMKNyMAwGCCqBHM9VAYN1BQAwSTELMAkGA1UEBhMC\n" -+ "04xDjAMBgNVBAoTBUdNU1NMMRAwDgYDVQQLEwdQS0kvU00yMRgwFgYDVQQDEw9S\n" -+ "290Q0EgZm9yIFRlc3QwIhgPMjAxNTEyMzExNjAwMDBaGA8yMDM1MTIzMDE2MDAw\n" -+ "FowSTELMAkGA1UEBhMCQ04xDjAMBgNVBAoTBUdNU1NMMRAwDgYDVQQLEwdQS0kv\n" -+ "00yMRgwFgYDVQQDEw9Sb290Q0EgZm9yIFRlc3QwWTATBgcqhkjOPQIBBggqgRzP\n" -+ "QGCLQNCAATj+apYlL+ddWXZ7+mFZXZJGbcJFXUN+Fszz6humeyWZP4qEEr2N0+a\n" -+ "dwo/21ft232yo0jPLzdscKB261zSQXSoz4wPDAZBgNVHQ4EEgQQnGnsD7oaOcWv\n" -+ "CTrspwSBDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIAxjAMBggqgRzP\n" -+ "QGDdQUAA0kAMEYCIQCEnW5BlQh0vmsOLxSoXYc/7zs++wWyFc1tnBHENR4ElwIh\n" -+ "I1Lwu6in1ruflZhzseWulXwcITf3bm/Y5X1g1XFWQUH\n" -+ "-----END CERTIFICATE-----\n"; - -// string转Uint8Array -function stringToUint8Array(str) { - var arr = []; - for (var i = 0, j = str.length; i < j; i++) { - arr.push(str.charCodeAt(i)); - } - return new Uint8Array(arr); -} - -// 证书示例 -function certSample() { - let encodingBlob = { - // 将string类型证书数据转为Uint8Array - data: stringToUint8Array(certData), - // 证书格式:支持PEM和DER,此例中对应PEM - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM - }; - - // 创建证书对象 - cryptoFramework.createX509Cert(encodingBlob, function (err, x509Cert) { - if (err != null) { - // 创建证书对象失败 - Console.log("createX509Cert failed, errCode: " + err.code + ", errMsg: " + err.message); - return; - } - // 创建证书对象成功 - Console.log("createX509Cert success"); - - // 获取证书版本 - let version = x509Cert.getVersion(); - - // 获取证书对象的序列化数据 - x509Cert.getEncoded(function (err, data) { - if (err != null) { - // 获取序列化数据失败 - Console.log("getEncoded failed, errCode: " + err.code + ", errMsg: " + err.message); - } else { - // 获取序列化数据成功 - Console.log("getEncoded success"); - } - }); - - // 获取证书公钥对象 - x509Cert.getPublicKey(function (err, pubKey) { - if (err != null) { - // 获取证书公钥失败 - Console.log("getPublicKey failed, errCode: " + err.code + ", errMsg: " + err.message); - } else { - // 获取证书公钥成功 - Console.log("getPublicKey success"); - } - }); - - // 业务需通过上级证书对象或本证书对象(自签名)的getPublicKey接口获取公钥对象,此处省略 - let pubKey = null; - - // 证书验签 - x509Cert.verify(pubKey, function (err, data) { - if (err == null) { - // 验签成功 - Console.log("verify success"); - } else { - // 验签失败 - Console.log("verify failed, errCode: " + err.code + ", errMsg: " + err.message); - } - }); - - // 时间字符串 - let date = "150527000001Z"; - - // 校验证书有效期 - x509Cert.checkValidityWithDate(date, function (err, data) { - if (err != null) { - // 证书有效期校验失败 - Console.log("checkValidityWithDate failed, errCode: " + err.code + ", errMsg: " + err.message); - } else { - // 证书有效期校验成功 - Console.log("checkValidityWithDate success"); - } - }); - }); -} -``` - -## 使用证书吊销列表操作 - -**场景说明** - -使用证书吊销列表操作中,典型的场景有: - -1. 解析X509证书吊销列表数据生成吊销列表对象。 -2. 获取证书吊销列表信息,比如:证书吊销列表版本、证书吊销列表类型等。 -3. 获取证书吊销列表对象的序列化数据。 -4. 检查证书是否被吊销。 -5. 证书吊销列表验签。 -6. 获取被吊销证书。 - -**接口及参数说明** - -详细接口说明可参考[API参考](../reference/apis/js-apis-cryptoFramework.md)。 - -以上场景涉及的常用接口如下表所示: - -| 实例名 | 接口名 | 描述 | -| --------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | -| cryptoFramework | createX509Crl(inStream : EncodingBlob, callback : AsyncCallback\) : void | 使用callback方式解析X509证书吊销列表数据生成证书吊销列表对象 | -| cryptoFramework | createX509Crl(inStream : EncodingBlob) : Promise\ | 使用promise方式解析X509证书吊销列表数据生成证书吊销列表对象 | -| X509Crl | isRevoked(cert : X509Cert, callback : AsyncCallback\) : void | 使用callback方式检查证书是否被吊销 | -| X509Crl | isRevoked(cert : X509Cert) : Promise\ | 使用promise方式检查证书是否被吊销 | -| X509Crl | getType() : string | 获取证书吊销列表类型 | -| X509Crl | getEncoded(callback : AsyncCallback\) : void | 使用callback方式获取证书吊销列表序列化数据 | -| X509Crl | getEncoded() : Promise\ | 使用promise方式获取证书吊销列表序列化数据 | -| X509Crl | verify(key : PubKey, callback : AsyncCallback\) : void | 使用callback方式进行证书吊销列表验签 | -| X509Crl | verify(key : PubKey) : Promise\ | 使用Promise方式进行证书吊销列表验签 | -| X509Crl | getVersion() : number | 获取证书吊销列表版本 | -| X509Crl | getIssuerName() : DataBlob | 获取证书吊销列表颁发者名称 | -| X509Crl | getLastUpdate() : string | 获取证书吊销列表lastUpdate日期 | -| X509Crl | getNextUpdate() : string | 获取证书吊销列表nextUpdate日期 | -| X509Crl | getRevokedCert(serialNumber : number, callback : AsyncCallback\) : void | 使用callback方式通过序列号获取证书吊销列表中的被吊销证书 | -| X509Crl | getRevokedCert(serialNumber : number) : Promise\ | 使用Promise方式通过序列号获取证书吊销列表中的被吊销证书 | -| X509Crl | getRevokedCertWithCert(cert : X509Cert, callback : AsyncCallback\) : void | 使用callback方式通过X509证书获取证书吊销列表中的被吊销证书 | -| X509Crl | getRevokedCertWithCert(cert : X509Cert) : Promise\ | 使用Promise方式通过X509证书获取证书吊销列表中的被吊销证书 | -| X509Crl | getRevokedCerts(callback : AsyncCallback\>) : void | 使用callback方式获取证书吊销列表的所有被吊销证书 | -| X509Crl | getRevokedCerts() : Promise\> | 使用Promise方式获取证书吊销列表的所有被吊销证书 | -| X509Crl | getTbsInfo(callback : AsyncCallback\) : void | 使用callback方式获取证书吊销列表的tbsCertList | -| X509Crl | getTbsInfo() : Promise\ | 使用Promise方式获取证书吊销列表的tbsCertList | -| X509Crl | getSignature() : DataBlob | 获取证书吊销列表的签名 | -| X509Crl | getSignatureAlgName() : string | 获取证书吊销列表的签名算法名称 | -| X509Crl | getSignatureAlgOid() : string | 获取证书吊销列表的签名算法OID | -| X509Crl | getSignatureAlgParams() : DataBlob | 获取证书吊销列表的签名算法参数 | - -**开发步骤** - -示例:解析X509证书吊销列表数据生成证书吊销列表对象,并调用对象方法(包含场景1-6) - -```javascript -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 证书吊销列表数据,此处仅示例,业务需根据场景自行设置 -let crlData = "-----BEGIN X509 CRL-----\n" -+ "MIIBijB0AgEBMA0GCSqGSIb3DQEBCwUAMBMxETAPBgNVBAMMCHJvb3QtY2ExFw0y\n" -+ "MDA2MTkxNjE1NDhaFw0yMDA3MTkxNjE1NDhaMBwwGgIJAMsozRATnap1Fw0yMDA2\n" -+ "MTkxNjEyMDdaoA8wDTALBgNVHRQEBAICEAIwDQYJKoZIhvcNAQELBQADggEBACPs\n" -+ "9gQB+djaXPHHRmAItebZpD3iJ/e36Dxr6aMVkn9FkI8OVpUI4RNcCrywyCZHQJte\n" -+ "995bbPjP7f1sZstOTZS0fDPgJ5SPAxkKOQB+SQnBFrlZSsxoUNU60gRqd2imR0Rn\n" -+ "1r09rP69F6E4yPc9biEld+llLGgoImP3zPOVDD6fbfcvVkjStY3bssVEQ/vjp4a3\n" -+ "/I12U7ZnSe3jaKqaQBoVJppkTFOIOq7IOxf5/IkMPmvRHDeC2IzDMzcUxym0dkny\n" -+ "EowHrjzo0bZVqpHMA2YgKZuwTpVLHk9GeBEK2hVkIoPVISkmiU4HFg0S6z68C5yd\n" -+ "DrAA7hErVgXhtURLbAI=\n" -+ "-----END X509 CRL-----\n"; - -// string转Uint8Array -function stringToUint8Array(str) { - var arr = []; - for (var i = 0, j = str.length; i < j; i++) { - arr.push(str.charCodeAt(i)); - } - return new Uint8Array(arr); -} - -// 证书吊销列表示例 -function crlSample() { - let encodingBlob = { - // 将string类型证书吊销列表数据转为Uint8Array - data: stringToUint8Array(crlData), - // 证书吊销列表格式:支持PEM和DER,此例中对应PEM - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM - }; - - // 创建证书吊销列表对象 - cryptoFramework.createX509Crl(encodingBlob, function (err, x509Crl) { - if (err != null) { - // 创建证书吊销列表对象失败 - Console.log("createX509Crl failed, errCode: " + err.code + ", errMsg: " + err.message); - return; - } - // 创建证书吊销列表对象成功 - Console.log("createX509Crl success"); - - // 获取证书吊销列表版本 - let version = x509Crl.getVersion(); - - // 获取证书吊销列表对象的序列化数据 - x509Crl.getEncoded(function (err, data) { - if (err != null) { - // 获取序列化数据失败 - Console.log("getEncoded failed, errCode: " + err.code + ", errMsg: " + err.message); - } else { - // 获取序列化数据成功 - Console.log("getEncoded success"); - } - }); - - // 业务需通过cryptoFramework的createX509Cert生成X509Cert证书对象,此处省略 - let x509Cert = null; - - // 检查证书是否被吊销 - x509Crl.isRevoked(x509Cert, function (err, isRevoked) { - if (err != null) { - // 检查证书是否被吊销失败 - Console.log("isRevoked failed, errCode: " + err.code + ", errMsg: " + err.message); - } else { - // 检查证书是否被吊销成功 - Console.log("isRevoked success, isRevoked? " + isRevoked); - } - }); - - // 业务需通过AsyKeyGenerator的generateKeyPair或convertKey接口获取PubKey对象,此处省略 - let pubKey = null; - - // 证书吊销列表验签 - x509Crl.verify(pubKey, function (err, data) { - if (err == null) { - // 验签成功 - Console.log("verify success"); - } else { - // 验签失败 - Console.log("verify failed, errCode: " + err.code + ", errMsg: " + err.message); - } - }); - - // 证书序列号,业务需自行设置 - let serialNumber = 1000; - - // 获取被吊销证书对象 - x509Crl.getRevokedCert(serialNumber, function (err, entry) { - if (err != null) { - // 获取被吊销证书对象失败 - Console.log("getRevokedCert failed, errCode: " + err.code + ", errMsg: " + err.message); - } else { - // 获取被吊销证书对象成功 - Console.log("getRevokedCert success"); - } - }); - }); -} -``` - -## 使用证书链校验器操作 - -**场景说明** - -使用证书链校验器操作中,典型的场景有: - -1. 证书链校验。 - -**接口及参数说明** - -详细接口说明可参考[API参考](../reference/apis/js-apis-cryptoFramework.md)。 - -以上场景涉及的常用接口如下表所示: - -| 实例名 | 接口名 | 描述 | -| ------------------ | ------------------------------------------------------------ | -------------------------------- | -| cryptoFramework | createCertChainValidator(algorithm :string) : CertChainValidator | 使用指定算法生成证书链校验器对象 | -| CertChainValidator | validate(certChain : CertChainData, callback : AsyncCallback\) : void | 使用callback方式校验证书链 | -| CertChainValidator | validate(certChain : CertChainData) : Promise\ | 使用promise方式校验证书链 | -| CertChainValidator | algorithm : string | 证书链校验器算法名称 | - -**开发步骤** - -示例:创建证书链校验器对象,并对证书链数据进行校验(场景1) - -```javascript -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 一级证书数据,此处仅示例,业务需自行设置真实数据 -let caCertData = "-----BEGIN CERTIFICATE-----\n" -+ "...\n" -+ "...\n" -+ "...\n" -+ "-----END CERTIFICATE-----\n"; - -// 二级证书数据,此处仅示例,业务需自行设置真实数据 -let secondCaCertData = "-----BEGIN CERTIFICATE-----\n" -+ "...\n" -+ "...\n" -+ "...\n" -+ "-----END CERTIFICATE-----\n"; - -// string转Uint8Array -function stringToUint8Array(str) { - var arr = []; - for (var i = 0, j = str.length; i < j; i++) { - arr.push(str.charCodeAt(i)); - } - return new Uint8Array(arr); -} - -// 证书链校验器示例:此示例中以校验二级证书链为例,业务需根据场景自行修改 -function certChainValidatorSample() { - // 证书链校验器算法,当前仅支持PKIX - let algorithm = "PKIX"; - - // 创建证书链校验器对象 - let validator = cryptoFramework.createCertChainValidator(algorithm); - - // 一级证书数据 - let uint8ArrayOfCaCertData = stringToUint8Array(caCertData); - - // 一级证书数据长度 - let uint8ArrayOfCaCertDataLen = new Uint8Array(new Uint16Array([uint8ArrayOfCaCertData.byteLength]).buffer); - - // 二级证书数据 - let uint8ArrayOf2ndCaCertData = stringToUint8Array(secondCaCertData); - - // 二级证书数据长度 - let uint8ArrayOf2ndCaCertDataLen = new Uint8Array(new Uint16Array([uint8ArrayOf2ndCaCertData.byteLength]).buffer); - - // 证书链二进制数据:二级证书数据长度+二级证书数据+一级证书数据长度+一级证书数据(L-V格式) - let encodingData = new Uint8Array(uint8ArrayOf2ndCaCertDataLen.length + uint8ArrayOf2ndCaCertData.length + - uint8ArrayOfCaCertDataLen.length + uint8ArrayOfCaCertData.length); - for (var i = 0; i < uint8ArrayOf2ndCaCertDataLen.length; i++) { - encodingData[i] = uint8ArrayOf2ndCaCertDataLen[i]; - } - for (var i = 0; i < uint8ArrayOf2ndCaCertData.length; i++) { - encodingData[uint8ArrayOf2ndCaCertDataLen.length + i] = uint8ArrayOf2ndCaCertData[i]; - } - for (var i = 0; i < uint8ArrayOfCaCertDataLen.length; i++) { - encodingData[uint8ArrayOf2ndCaCertDataLen.length + uint8ArrayOf2ndCaCertData.length + i] = uint8ArrayOfCaCertDataLen[i]; - } - for (var i = 0; i < uint8ArrayOfCaCertData.length; i++) { - encodingData[uint8ArrayOf2ndCaCertDataLen.length + uint8ArrayOf2ndCaCertData.length + - uint8ArrayOfCaCertDataLen.length + i] = uint8ArrayOfCaCertData[i]; - } - - let certChainData = { - // Uint8Array类型:L-V格式(证书数据长度-证书数据) - data: encodingData, - // 证书数量,此示例中为2 - count: 2, - // 证书格式:支持PEM和DER,此例中对应PEM - encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM - }; - - // 校验证书链 - validator.validate(certChainData, function (err, data) { - if (err != null) { - // 证书链校验失败 - Console.log("validate failed, errCode: " + err.code + ", errMsg: " + err.message); - } else { - // 证书链校验成功 - Console.log("validate success"); - } - }); -} -``` - -## 使用被吊销证书操作 - -**场景说明** - -使用被吊销证书操作中,典型的场景有: - -1. 获取被吊销证书对象。 -2. 获取被吊销证书信息,比如:序列号、证书颁发者、证书吊销日期。 -3. 获取被吊销证书对象的序列化数据。 - -**接口及参数说明** - -详细接口说明可参考[API参考](../reference/apis/js-apis-cryptoFramework.md)。 - -以上场景涉及的常用接口如下表所示: - -| 实例名 | 接口名 | 描述 | -| ------------ | ----------------------------------------------------------- | ------------------------------------------ | -| X509CrlEntry | getEncoded(callback : AsyncCallback\) : void; | 使用callback方式获取被吊销证书的序列化数据 | -| X509CrlEntry | getEncoded() : Promise\; | 使用promise方式获取被吊销证书的序列化数据 | -| X509CrlEntry | getSerialNumber() : number; | 获取被吊销证书的序列号 | -| X509CrlEntry | getCertIssuer(callback : AsyncCallback\) : void; | 使用callback方式获取被吊销证书颁发者 | -| X509CrlEntry | getCertIssuer() : Promise\; | 使用promise方式获取被吊销证书颁发者 | -| X509CrlEntry | getRevocationDate(callback : AsyncCallback\) : void; | 使用callback方式获取被吊销证书的吊销日期 | -| X509CrlEntry | getRevocationDate() : Promise\; | 使用promise方式获取被吊销证书的吊销日期 | - -**开发步骤** - -示例:获取被吊销证书对象,并调用对象方法(包含场景1-3) - -```javascript -import cryptoFramework from '@ohos.security.cryptoFramework'; - -// 被吊销证书示例 -function crlEntrySample() { - // 业务需自行通过cryptoFramework的createX509Crl接口创建X509Crl对象,此处省略 - let x509Crl = null; - - // 获取被吊销证书对象,业务需根据场景调用X509Crl的接口获取,此示例使用getRevokedCert获取 - let serialNumber = 1000; - x509Crl.getRevokedCert(serialNumber, function (err, crlEntry) { - if (err != null) { - // 获取被吊销证书对象失败 - Console.log("getRevokedCert failed, errCode: " + err.code + ", errMsg: " + err.message); - return; - } - // 获取被吊销证书对象成功 - Console.log("getRevokedCert success"); - - // 获取被吊销证书的序列号 - let serialNumber = crlEntry.getSerialNumber(); - - // 获取被吊销证书的吊销日期 - crlEntry.getRevocationDate(function (err, date) { - if (err != null) { - // 获取吊销日期失败 - Console.log("getRevocationDate failed, errCode: " + err.code + ", errMsg: " + err.message); - } else { - // 获取吊销日期成功 - Console.log("getRevocationDate success, date is: " + date); - } - }); - - // 获取被吊销证书对象的序列化数据 - crlEntry.getEncoded(function (err, data) { - if (err != null) { - // 获取序列化数据失败 - Console.log("getEncoded failed, errCode: " + err.code + ", errMsg: " + err.message); - } else { - // 获取序列化数据成功 - Console.log("getEncoded success"); - } - }); - }); -} -``` diff --git a/zh-cn/application-dev/security/cryptoFramework-overview.md b/zh-cn/application-dev/security/cryptoFramework-overview.md index b1cae2e44127e3d42721e3963c1198c07f161de5..464b0cb4d327592d23b321b8047c9f2d6cc629e2 100644 --- a/zh-cn/application-dev/security/cryptoFramework-overview.md +++ b/zh-cn/application-dev/security/cryptoFramework-overview.md @@ -1,5 +1,5 @@ # 加解密算法库框架概述 -加解密算法库框架是一个屏蔽了第三方密码学算法库实现差异的算法框架,提供加解密、签名验签、消息验证码、哈希、安全随机数和证书等相关功能。开发者可以通过调用加解密算法库框架,忽略底层不同三方算法库的差异,实现迅捷开发。 +加解密算法库框架是一个屏蔽了第三方密码学算法库实现差异的算法框架,提供加解密、签名验签、消息验证码、哈希、安全随机数等相关功能。开发者可以通过调用加解密算法库框架,忽略底层不同三方算法库的差异,实现迅捷开发。 ## 框架实现原理 加解密算法库框架提供的组件分为三层:接口层,Framework层和插件层。接口层负责对外提供统一的JS接口,插件层实现针对具体三方算法库的功能,Framework层通过灵活加载插件层的插件适配并屏蔽三方算法库差异。 ## 基本概念 @@ -98,13 +98,6 @@ HMAC(Hash-based Message Authentication Code)是一种基于密钥的消息 - **内部状态**代表随机数生成器内存中的数值,当内部状态相同时,随机数生成器会生成固定的随机数序列 - **种子**(seed)是一个用来对伪随机数的内部状态进行初始化的数据,随机数生成器通过种子来生成一系列的随机序列。 -**证书** - -数字证书提供了一种数字验证用户、设备、业务身份的方式。X509证书是国际定制的标准格式。加解密算法库框架部件提供X509证书、X509证书吊销列表、证书链校验器相关的功能。 - -- X509证书:提供X509证书的解析、序列化、X509证书签名验证、证书相关的信息查询等功能 -- X509证书吊销列表:提供X509证书吊销列表的解析、序列化、信息查询等功能 -- 证书链校验器:提供证书链校验(不包括证书有效期的校验)、证书链算法名称查询的功能 ## 约束与限制 @@ -240,13 +233,3 @@ RSA签名验签时,涉及三种加解密模式:PKCS1和PSS。 ### SHA算法规格 加解密算法库框架当前支持:SHA1,SHA224,SHA256,SHA384,SHA512 - -### 证书规格 - -- **证书链校验**
- - 由于端侧系统时间不可信,证书链校验不包含对证书有效时间的校验。如果需要检查证书的时间有效性,可使用X509证书的checkValidityWithDate()方法进行检查。 - -- **证书格式** - - 目前支持DER与PEM格式的证书。