HarmonyOS 鸿蒙Next 证书解析

发布于 1周前 作者 sinazl 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 证书解析

 

// 解析证书
certParseByBase64Str = (base64Str: string): ResolveResult => {
let certData = ‘-----BEGIN CERTIFICATE-----\n’ + base64Str + ‘\n-----END CERTIFICATE-----\n’;
Logger.info(‘certData=:’, certData);

let textEncoder = new util.TextEncoder(); let encodingBlob: certFramework.EncodingBlob = {

<span class="hljs-comment">// 将证书数据从string类型转换成Unit8Array data: textEncoder.encodeInto(certData),</span>

<span class="hljs-comment">// 证书格式,仅支持PEM和DER。在此示例中,证书为PEM格式</span>

encodingFormat: certFramework.EncodingFormat.FORMAT_PEM

};

let resultData: ESObject = {};

let ret: ResolveResult = {} certFramework.createX509Cert(encodingBlob, (err, x509Cert) => { if (err != null) { Logger.info(‘err.message=:’, JSON.stringify(err));

  <span class="hljs-comment">// 创建X509Cert实例失败</span>

  ret = {
    iSuccessful: <span class="hljs-literal">false</span>,
    errorMsg: <span class="hljs-string">"createX509Cert failed, errCode:${err.code}, errMsg:${err.message}"</span>,
    data: resultData
  };
  <span class="hljs-keyword">return</span> ret;

} <span class="hljs-keyword">else</span> {

  <span class="hljs-keyword">try</span> {

    <span class="hljs-keyword">let</span> CN = x509Cert.getSubjectName();

    <span class="hljs-comment">// 证书的序列号</span>
    <span class="hljs-keyword">let</span> serialNumner = x509Cert.getCertSerialNumber();

    <span class="hljs-comment">// 证书有效期起始日期</span>
    <span class="hljs-keyword">let</span> notBeforeTime = x509Cert.getNotBeforeTime();

    <span class="hljs-comment">// 证书有效期截止日期</span>
    <span class="hljs-keyword">let</span> notAfterTime = x509Cert.getNotAfterTime();
    Logger.info(<span class="hljs-string">'serialNumner=:'</span>, serialNumner.toString());
    Logger.info(<span class="hljs-string">'notBeforeTime=:'</span>, notBeforeTime);
    Logger.info(<span class="hljs-string">'notAfterTime=:'</span>, notAfterTime);
    resultData = {
      serialNumner: serialNumner,
      notBeforeTime: notBeforeTime,
      notAfterTime: notAfterTime,
      CN: CN
    };

    Logger.info(<span class="hljs-string">'resultData=:'</span>, <span class="hljs-built_in">JSON</span>.stringify(resultData));
    ret = { iSuccessful: <span class="hljs-literal">true</span>, errorMsg: <span class="hljs-string">''</span>, data: resultData };
    <span class="hljs-keyword">return</span> ret;
  } <span class="hljs-keyword">catch</span> (e) {
    ret = { iSuccessful: <span class="hljs-literal">false</span>, errorMsg: <span class="hljs-string">"解析异常"</span> + e.message, data: resultData };
    <span class="hljs-keyword">return</span> ret;
  }
}

}) }<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

写了一个证书解析的方法  解析后怎么返回返回出去?目前在createX509Cert这样写返回ResolveResult 报错。

还有一个疑问  

let CN = x509Cert.getSubjectName();

解析证书CN怎么获取?在官方文档上没有找到。

2 回复
x509Cert.getSubjectName();方法返回的是Uint8Array类型的数据,如何将Uint8Array转换成String您可以尝试使用@ohos.util中的decodeToString
方法。官方文档如下:

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-util-V5#decodetostring12

证书算法库x509Cert.getSubjectName()接口返回的是ASCII编码,不支持中文。

针对HarmonyOS 鸿蒙Next证书解析的问题,以下是一些专业解答:

HarmonyOS鸿蒙Next在应用开发过程中,涉及多种证书文件的解析与使用。主要包括P12、CSR、CER以及P7B等文件格式。

  • P12文件:这是一种包含私钥和证书的二进制文件格式,主要用于应用签名,确保应用的安全性与可信来源。
  • CSR文件:全称为Certificate Signing Request,即证书签名请求文件,包含公钥以及申请者的身份信息。当需要向证书颁发机构(CA)申请证书时,会先生成一个CSR文件并提交给CA。
  • CER文件:这是一种证书文件格式,通常包含公钥和证书持有者的信息,用于验证应用的签名。该文件由华为AppGallery Connect颁发。
  • P7B文件:这是一种包含证书链的文件格式,通常用于存储根证书、中间证书和最终用户证书。在应用签名时,可能需要包含完整的证书链以确保信任。P7B文件(Profile文件)还包含了HarmonyOS应用/元服务的包名、数字证书信息、权限列表等。

解析这些证书文件通常需要使用专业的工具或开发环境,如DevEco Studio。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部