HarmonyOS 鸿蒙Next createX509Cert失败

HarmonyOS 鸿蒙Next createX509Cert失败

cryptoCert.createX509Cert()失败,错误日志:

encryptRSA failed, 401, create X509Cert failed,Cannot get SourceMap info, dump raw stack: =====================Backtrace======================== #01 pc 0000000000017df7 /system/lib64/module/security/libcert.z.so #02 pc 000000000001ee87 /system/lib64/module/security/libcert.z.so #03 pc 00000000000208af /system/lib64/module/security/libcert.z.so #04 pc 00000000000479eb /system/lib64/platformsdk/libace_napi.z.so #05 pc 0000000000012cbb /system/lib64/platformsdk/libuv.so #06 pc 00000000000172bb /system/lib64/platformsdk/libuv.so #07 pc 0000000000016c03 /system/lib64/platformsdk/libuv.so #08 pc 000000000001772b /system/lib64/platformsdk/libuv.so
let PK_test =
  "xxx"

let base64Helper = new util.Base64Helper();
let pubkey = base64Helper.decodeSync(PK_test);
let pubKeyBlob = await this.getPublicKeyX509(skey)
async
getPublicKeyX509(pubkey:
Uint8Array
)
{
  let encodingBlob: cryptoCert.EncodingBlob = { data: pubkey, encodingFormat: cryptoCert.EncodingFormat.FORMAT_PEM }
  let x509Cert = await cryptoCert.createX509Cert(encodingBlob)
  let publicKey = x509Cert.getPublicKey()
  return publicKey
}

更多关于HarmonyOS 鸿蒙Next createX509Cert失败的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复
import web_webview from '@ohos.web.webview';
import business_error from '@ohos.base';
import cert from '@ohos.security.cert';
import certFramework from '@ohos.security.cert';
import { BusinessError } from '@ohos.base';
import util from '@ohos.util';
function Uint8ArrayToString(dataArray:Uint8Array) {
  let dataString = ''
  for (let i = 0; i < dataArray.length; i++) {
    dataString += String.fromCharCode(dataArray[i])
  }
  return dataString
}
function create509(encodingBlob: certFramework.EncodingBlob){
  certFramework.createX509Cert(encodingBlob).then(x509Cert => {
    console.log('****** createX509Cert success');
  }).catch((error: BusinessError) => {
    console.error('*** createX509Cert failed, errCode: ' + error.code + ', errMsg: ' + error.message);
  });
}
@Entry
@Component
struct Index {
  // outputStr在UI界面显示调试信息
  @State outputStr: string = ''
  webviewCtl: web_webview.WebviewController = new web_webview.WebviewController();
  build() {
    Row() {
      Column() {
        Button() {
          Text('getCertificate Promise')
            .fontSize(10)
            .fontWeight(FontWeight.Bold)
        }
        .type(ButtonType.Capsule)
        .onClick(() => {
          try {
            this.webviewCtl.getCertificate().then((x509CertArray:Array<cert.X509Cert>) => {
              x509CertArray[0].getEncoded((error, data) => {
                if (error != null) {
                  console.error('getEncoded failed, errCode: ' + error.code + ', errMsg: ' + error.message);
                } else {
                  create509(data)
                }
              });
            })
          } catch (error) {
            let e:business_error.BusinessError = error as business_error.BusinessError;
            this.outputStr = 'getCertificate failed: ' + e.code + ", errMsg: " + e.message;
          }
        })
        .height(50)

        Web({ src: 'https://www.baidu.com', controller: this.webviewCtl })
          .fileAccess(true)
          .javaScriptAccess(true)
          .domStorageAccess(true)
          .onlineImageAccess(true)
          .onPageEnd((e) => {
            if(e) {
              this.outputStr = 'onPageEnd : url = ' + e.url
            }
          })
          .onSslErrorEventReceive((e) => {
            // 忽略ssl证书错误,便于测试一些证书过期的网站,如:https://expired.badssl.com
            e.handler.handleConfirm()
          })
          .width('100%')
          .height('70%')
      }
      .height('100%')
    }
  }
}

报错401 非法入参。请确认X509证书序列化数据是否正确,参考文档链接:

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V13/js-apis-cert-V13#certresult

如demo获取某网站的X509格式证书,并通过获取到的EncodingBlob可正常反创建X509证书对象

更多关于HarmonyOS 鸿蒙Next createX509Cert失败的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


针对HarmonyOS 鸿蒙Next createX509Cert失败的问题,以下是一些可能的解决方案:

  1. 检查权限:确保您的应用或服务拥有足够的权限来创建和存储X509证书。在HarmonyOS中,权限管理可能较为严格,您需要在manifest文件中正确声明所需权限。
  2. 验证证书格式:检查提供的证书格式是否符合X509标准。错误的格式或损坏的证书文件都可能导致创建失败。
  3. API调用方式:确认您使用的API调用方式正确,且符合HarmonyOS的API规范。可以参考官方文档中的示例代码进行比对。
  4. 环境配置:检查开发环境是否已正确配置,包括SDK版本、依赖库等。确保使用的是最新或推荐的版本。
  5. 错误代码401:报错401通常表示非法入参,请确认X509证书序列化数据是否正确。可以重新获取证书数据,并尝试再次创建。

如果以上步骤均无法解决问题,可能是由于系统级别的bug或特定环境下的兼容性问题。此时,建议您仔细查看错误日志,获取更多错误信息,以便进一步定位问题。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部