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失败的问题,以下是一些可能的解决方案:
- 检查权限:确保您的应用或服务拥有足够的权限来创建和存储X509证书。在HarmonyOS中,权限管理可能较为严格,您需要在manifest文件中正确声明所需权限。
- 验证证书格式:检查提供的证书格式是否符合X509标准。错误的格式或损坏的证书文件都可能导致创建失败。
- API调用方式:确认您使用的API调用方式正确,且符合HarmonyOS的API规范。可以参考官方文档中的示例代码进行比对。
- 环境配置:检查开发环境是否已正确配置,包括SDK版本、依赖库等。确保使用的是最新或推荐的版本。
- 错误代码401:报错401通常表示非法入参,请确认X509证书序列化数据是否正确。可以重新获取证书数据,并尝试再次创建。
如果以上步骤均无法解决问题,可能是由于系统级别的bug或特定环境下的兼容性问题。此时,建议您仔细查看错误日志,获取更多错误信息,以便进一步定位问题。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。