在HarmonyOS开发中,PEM证书也可能用于安全相关的配置,例如在配置HTTP请求时,如果需要进行证书验证,可以通过PEM格式的证书来实现。具体来说,开发者可以将PEM证书通过特定的命令上传到设备,并在代码中使用这些证书来进行加密或验证操作。
目前可以使用如下方案:
openssl x509 -inform der -in yourcertificate.cer -out yourcertificate.pem。
命令如下:
hdc file send testCert.pem(PC上证书路径)/etc/ssl/certs/testCert.pem(证书默认沙箱路径)。
import fs from '@ohos.file.fs'; import { http } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; import { common } from '@kit.AbilityKit'; @Entry @Component struct HttpRootCerPage { requestHttp(url: string): Promise<string> { let context = this.getUIContext()?.getHostContext() as common.Context; context.area = 0; const keyPem = context.resourceManager.getRawFileContentSync('_.cnfic.com.cn.pem'); let filesDir: string = context.filesDir; let filePath = filesDir + "/testCer2.pem"; let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE); fs.writeSync(file.fd, keyPem.buffer); fs.fsyncSync(file.fd); fs.closeSync(file); return new Promise(() => { let httpRequest = http.createHttp(); httpRequest.request(url, { method: http.RequestMethod.GET, caPath: filePath, connectTimeout: 60000, readTimeout: 60000, }, (err: BusinessError, data) => { console.info(`1---- url: ${JSON.stringify(url)}`); if (!err) { // data.result为HTTP响应内容,可根据业务需要进行解析 console.info(`1---- arrResult: ${JSON.stringify(data.result)}`); console.info(`1---- code: ${JSON.stringify(data.responseCode)}`); console.info(`1---- type: ${JSON.stringify(data.resultType)}`); console.info(`1---- header: ${JSON.stringify(data.header)}`); console.info(`1---- cookies: ${JSON.stringify(data.cookies)}`); console.info(`1 ---------------------------------------------`); httpRequest.destroy(); } else { console.error(`1---- error: ${JSON.stringify(err)}`); console.info(`1 ---------------------------------------------`); httpRequest.destroy(); } }); }); } build() { Column() { Button('testButton') .height(50) .width(80) .onClick(() => { this.requestHttp('url'); }) }.height('100%') } }