diff --git a/zh-cn/application-dev/security/cert-guidelines.md b/zh-cn/application-dev/security/cert-guidelines.md index e25951555dced38ce3d53290920c97c97b8d8886..b78ebcee9e85814467764a8800c93b49f93558b0 100755 --- a/zh-cn/application-dev/security/cert-guidelines.md +++ b/zh-cn/application-dev/security/cert-guidelines.md @@ -48,7 +48,7 @@ | X509Cert | getBasicConstraints() : number | 获取证书基本约束 | | X509Cert | getSubjectAltNames() : DataArray | 获取证书主体可选名称 | | X509Cert | getIssuerAltNames() : DataArray | 获取证书颁发者可选名称 | - +| X509Cert | getItem(itemType: CertItemType) : DataBlob10+ | 获取X509证书对应的字段 | **开发步骤** 示例:解析X509证书数据生成证书对象,并调用对象方法(包含场景1-6) @@ -145,6 +145,105 @@ function certSample() { } ``` +## 使用证书扩展域段操作 + +> **说明** +> +> 本场景基于API version 10,OH SDK版本4.0.9及以上,适用于JS语言开发 + +**场景说明** + +使用证书扩展域段操作中,典型的场景有: + +1. 解析证书扩展域段数据生成证书扩展域段对象。 +2. 获取证书扩展域段信息,比如:证书扩展域段对象标识符列表,根据对象标识符获取具体数据等。 +3. 校验证书是否为CA证书。 + +**接口及参数说明** + +详细接口说明可参考[API参考](../reference/apis/js-apis-cert.md)。 + +以上场景涉及的常用接口如下表所示: + +| 实例名 | 接口名 | 描述 | +| ------------- | ------------------------------------------------------------ | -------------------------------------- | +| cryptoCert | createCertExtension(inStream : EncodingBlob, callback : AsyncCallback) : void10+ | 使用callback方式创建证书扩展域段的对象 | +| cryptoCert | createCertExtension(inStream : EncodingBlob) : Promise10+ | 使用promise方式创建证书扩展域段的对象 | +| CertExtension | getEncoded() : EncodingBlob10+ | 获取证书扩展域段序列化数据 | +| CertExtension | getOidList(valueType : ExtensionOidType) : DataArray10+ | 获取证书扩展域段对象标识符列表 | +| CertExtension | getEntry(valueType: ExtensionEntryType, oid : DataBlob) : DataBlob10+ | 获取证书扩展域段对象信息 | +| CertExtension | checkCA() : number10+ | 校验证书是否为CA证书 | + +**开发步骤** + +示例:解析X509证书扩展域段数据生成证书扩展域段对象,并调用对象方法(包含场景1-3) + +```javascript +import cryptoCert from '@ohos.security.cert'; + +// 证书扩展域段数据,此处仅示例,业务需根据场景自行设置 +let certData = new Uint8Array([ + 0x30, 0x40, 0x30, 0x0F, 0x06, 0x03, 0x55, 0x1D, + 0x13, 0x01, 0x01, 0xFF, 0x04, 0x05, 0x30, 0x03, + 0x01, 0x01, 0xFF, 0x30, 0x0E, 0x06, 0x03, 0x55, + 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, + 0x02, 0x01, 0xC6, 0x30, 0x1D, 0x06, 0x03, 0x55, + 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, 0xE0, 0x8C, + 0x9B, 0xDB, 0x25, 0x49, 0xB3, 0xF1, 0x7C, 0x86, + 0xD6, 0xB2, 0x42, 0x87, 0x0B, 0xD0, 0x6B, 0xA0, + 0xD9, 0xE4 +]); + +// 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 certExtensionSample() { + let encodingBlob = { + data: certData, + // 证书扩展域段格式:当前仅支持DER格式 + encodingFormat: cryptoCert.EncodingFormat.FORMAT_DER + }; + + // 创建证书扩展域段对象 + cryptoCert.createCertExtension(encodingBlob, function (err, certExtension) { + if (err != null) { + // 创建证书扩展域段对象失败 + console.log("createCertExtension failed, errCode: " + err.code + ", errMsg: " + err.message); + return; + } + // 创建证书扩展域段对象成功 + console.log("createCertExtension success"); + + try { + // 获取证书扩展域段对象的序列化数据 + let encodedData = certExtension.getEncoded(); + + // 获取证书扩展域段对象的对象标识符列表 + let oidList = certExtension.getOidList(cryptoCert.ExtensionOidType.EXTENSION_OID_TYPE_ALL); + + // 根据对象标识符获取证书扩展域段信息 + let oidData = "2.5.29.14"; + let oid = { + data: stringToUint8Array(oidData), + } + let entry = certExtension.getEntry(cryptoCert.ExtensionEntryType.EXTENSION_ENTRY_TYPE_ENTRY, oid); + + // 校验证书是否为CA证书 + let pathLen = certExtension.checkCA(); + } catch (err) { + console.log("operation failed: " + JSON.stringify(err)); + } + }); +} +``` + ## 使用证书吊销列表操作 **场景说明**