【HarmonyOS NEXT】鸿蒙https请求跳过证书校验

2024-06-18 14:36

本文主要是介绍【HarmonyOS NEXT】鸿蒙https请求跳过证书校验,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

https请求前,进行自签名证书加载

1.运行报错: error:{"code":2300060,"message":"SSL peer certificate or SSH remote key was not OK"},显示无法校验服务器身份,
2. 导致这个错误码的原因可能有以下几种:

服务器证书过期或者未被信任:如果服务器证书过期或者未被信任,客户端将无法验证证书的有效性,从而导致CURLE_PEER_FAILED_VERIFICATION错误。
服务器证书链不完整:如果服务器证书链不完整,客户端将无法验证证书的有效性,从而导致CURLE_PEER_FAILED_VERIFICATION错误。
客户端时间与服务器时间不一致:如果客户端的系统时间与服务器的时间不一致,客户端将无法验证证书的有效性,从而导致CURLE_PEER_FAILED_VERIFICATION错误。
针对这些问题,可以采取以下措施:
更新服务器证书:如果服务器证书过期或者未被信任,需要更新服务器证书。
完整的证书链:确保服务器证书链完整,包括中间证书。
同步客户端和服务器时间:确保客户端和服务器时间同步。
3、可将自签名证书放在项目rawfile文件目录下,通过demo写入工程机系统,在请求时设置capath参数指定证书写入的沙箱路径进,看是否可请求到结果

应用自己的沙箱路径
/data/app/el2/100/base/{包名}/haps/entry/files

https请求跳过证书校验方法:

将p12转换成pem尝试,p12转换pem可参考如下命令

## 生成时如果p12证书有密码,需要输入密码

## 生成 key文件命令
openssl pkcs12 -in client.p12 -out key.pem -nocerts -nodes
## 生成 证书文件命令
openssl pkcs12 -in client.p12 -out crt.pem -clcerts -nokeys

示例代码

// 引入包名
import { http } from '@kit.NetworkKit';
import { BusinessError } from '@kit.BasicServicesKit';// 每一个httpRequest对应一个HTTP请求任务,不可复用
let httpRequest = http.createHttp();
// 用于订阅HTTP响应头,此接口会比request请求先返回。可以根据业务需要订阅此消息
// 从API 8开始,使用on('headersReceive', Callback)替代on('headerReceive', AsyncCallback)。 8+
httpRequest.on('headersReceive', (header: Object) => {console.info('header: ' + JSON.stringify(header));
});class Header {public contentType: string;constructor(contentType: string) {this.contentType = contentType;}
}httpRequest.request(// 填写HTTP请求的URL地址,可以带参数也可以不带参数。URL地址需要开发者自定义。请求的参数可以在extraData中指定"EXAMPLE_URL",{method: http.RequestMethod.POST, // 可选,默认为http.RequestMethod.GET// 当使用POST请求时此字段用于传递请求体内容,具体格式与服务端协商确定extraData: 'data to send',expectDataType: http.HttpDataType.STRING, // 可选,指定返回数据的类型usingCache: true, // 可选,默认为truepriority: 1, // 可选,默认为1// 开发者根据自身业务需要添加header字段header: new Header('application/json'),readTimeout: 60000, // 可选,默认为60000msconnectTimeout: 60000, // 可选,默认为60000msusingProtocol: http.HttpProtocol.HTTP1_1, // 可选,协议类型默认值由系统自动指定usingProxy: false, //可选,默认不使用网络代理,自API 10开始支持该属性caPath: '/path/to/cacert.pem', // 可选,默认使用系统预设CA证书,自API 10开始支持该属性clientCert: { // 可选,默认不使用客户端证书,自API 11开始支持该属性certPath: '/path/to/client.pem', // 默认不使用客户端证书,自API 11开始支持该属性keyPath: '/path/to/client.key', // 若证书包含Key信息,传入空字符串,自API 11开始支持该属性certType: http.CertType.PEM, // 可选,默认使用PEM,自API 11开始支持该属性keyPassword: "passwordToKey" // 可选,输入key文件的密码,自API 11开始支持该属性},multiFormDataList: [ // 可选,仅当Header中,'content-Type'为'multipart/form-data'时生效,自API 11开始支持该属性{name: "Part1", // 数据名,自API 11开始支持该属性contentType: 'text/plain', // 数据类型,自API 11开始支持该属性data: 'Example data', // 可选,数据内容,自API 11开始支持该属性remoteFileName: 'example.txt' // 可选,自API 11开始支持该属性}, {name: "Part2", // 数据名,自API 11开始支持该属性contentType: 'text/plain', // 数据类型,自API 11开始支持该属性// data/app/el2/100/base/com.example.myapplication/haps/entry/files/fileName.txtfilePath: `${getContext(this).filesDir}/fileName.txt`, // 可选,传入文件路径,自API 11开始支持该属性remoteFileName: 'fileName.txt' // 可选,自API 11开始支持该属性}]},(err: BusinessError, data: http.HttpResponse) => {if (!err) {// data.result为HTTP响应内容,可根据业务需要进行解析console.info('Result:' + JSON.stringify(data.result));console.info('code:' + JSON.stringify(data.responseCode));console.info('type:' + JSON.stringify(data.resultType));// data.header为HTTP响应头,可根据业务需要进行解析console.info('header:' + JSON.stringify(data.header));console.info('cookies:' + JSON.stringify(data.cookies)); // 自API version 8开始支持cookie// 取消订阅HTTP响应头事件httpRequest.off('headersReceive');// 当该请求使用完毕时,开发者务必调用destroy方法主动销毁该JavaScript Object。httpRequest.destroy();} else {console.info('error:' + JSON.stringify(err));// 取消订阅HTTP响应头事件httpRequest.off('headersReceive');// 当该请求使用完毕时,开发者务必调用destroy方法主动销毁该JavaScript Object。httpRequest.destroy();}});

DnsOverHttpsConfiguration

DnsOverHttpsConfiguration接口允许开发人员配置HTTPS上的DNS(DOH)设置,从而通过HTTPS端点实现安全的DNS解析。

系统能力:SystemCapability.Collaboration.RemoteCommunication

起始版本:4.1.0(11)

属性:

名称

类型

只读

必填

说明

url

URLOrString

DOH端点的URL或字符串表示形式。

skipCertificatesValidation

boolean

指定是否跳过DOH终结点的SSL/TLS证书验证。默认值为false。

示例:

// Configure DNS over HTTPS settings
const dohConfig: rcp.DnsOverHttpsConfiguration = {url: "https://dns.example.com/dns-query",skipCertificatesValidation: true,
};// Use the DNS over HTTPS configuration in the session creation
const sessionWithDoh = rcp.createSession({ requestConfiguration: { dns: { dnsOverHttps: dohConfig } } });

网络请求静态配置

Configuration

Configuration接口包含一组配置参数,开发人员可以利用这些参数来微调会话中HTTP请求的行为。这包括传输、跟踪、代理、DNS和安全配置的设置。

系统能力:SystemCapability.Collaboration.RemoteCommunication

起始版本:4.1.0(11)

属性:

名称

类型

只读

必填

说明

transfer

TransferConfiguration

配置与HTTP请求期间的数据传输相关的各个方面,例如自动重定向和超时设置。

tracing

TracingConfiguration

使开发人员能够在HTTP请求期间捕获详细的跟踪信息,有助于调试和性能分析。

proxy

ProxyConfiguration

配置会话的代理设置,允许开发人员定义'system'、'no-proxy'或WebProxy配置。

dns

DnsConfiguration

指定与DNS相关的配置,包括自定义DNS规则和通过HTTPS使用DNS的选项。

security

SecurityConfiguration

包括用于处理安全相关方面的设置,如证书和服务器身份验证。

示例:

const requestConfig: rcp.Configuration = {transfer: {autoRedirect: true,timeout: {connectMs: 5000,transferMs: 10000,},assumesHTTP3Capable: true,pathPreference: "cellular",},tracing: {verbose: true,},proxy: "system",dns: {dnsRules: [{ host: "https://example.com", port: 443, ipAddresses: ["192.168.1.1", "192.168.1.2"] }]},security: {certificate: {content: "-----BEGIN CERTIFICATE-----\n...",type: "PEM",key: "-----BEGIN PRIVATE KEY-----\n...",keyPassword: "your-password",},serverAuthentication: {credential: {username: "your-username",password: "your-password",},authenticationType: "basic",},},
};// Use the configuration in the session creation
const session = rcp.createSession({ requestConfiguration: requestConfig });

在网络请求中获取相应的跟踪数据

TransferConfiguration

TransferConfiguration接口为开发人员提供了一组选项,用于调整会话中HTTP请求期间的数据传输行为。这包括与自动重定向和超时配置相关的设置。

系统能力:SystemCapability.Collaboration.RemoteCommunication

起始版本:4.1.0(11)

属性:

名称

类型

只读

必填

说明

autoRedirect

boolean

指定HTTP客户端是否应自动遵循重定向。如果设置为true,客户端将自动遵循HTTP重定向;否则,它不会。默认值为true。

timeout

Timeout

配置HTTP请求的超时值,允许开发人员定义连接和传输数据所允许的最长时间。如果未设置,则使用默认时间。

assumesHTTP3Capable

boolean

指定连接是否具有HTTP/3功能。

  • true:连接具有HTTP/3功能;
  • false:连接不具有HTTP/3功能;
  • 默认值为false。

pathPreference

PathPreference

这只是调用者的一个建议,系统决定使用哪个路径。可以是'自动'或'蜂窝'路径。默认为'自动'路径。

serviceType

ServiceType

服务类型。默认为undefined。

示例:

const transferConfig: rcp.TransferConfiguration = {autoRedirect: true,timeout: {connectMs: 5000,transferMs: 10000,},assumesHTTP3Capable: true,pathPreference: "cellular",
};// Use the configuration in the session creation
const session = rcp.createSession({ requestConfiguration: { transfer: transferConfig } });

这篇关于【HarmonyOS NEXT】鸿蒙https请求跳过证书校验的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1072272

相关文章

SpringBoot3.4配置校验新特性的用法详解

《SpringBoot3.4配置校验新特性的用法详解》SpringBoot3.4对配置校验支持进行了全面升级,这篇文章为大家详细介绍了一下它们的具体使用,文中的示例代码讲解详细,感兴趣的小伙伴可以参考... 目录基本用法示例定义配置类配置 application.yml注入使用嵌套对象与集合元素深度校验开发

SpringBoot请求参数接收控制指南分享

《SpringBoot请求参数接收控制指南分享》:本文主要介绍SpringBoot请求参数接收控制指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring Boot 请求参数接收控制指南1. 概述2. 有注解时参数接收方式对比3. 无注解时接收参数默认位置

Spring 请求之传递 JSON 数据的操作方法

《Spring请求之传递JSON数据的操作方法》JSON就是一种数据格式,有自己的格式和语法,使用文本表示一个对象或数组的信息,因此JSON本质是字符串,主要负责在不同的语言中数据传递和交换,这... 目录jsON 概念JSON 语法JSON 的语法JSON 的两种结构JSON 字符串和 Java 对象互转

springboot项目如何开启https服务

《springboot项目如何开启https服务》:本文主要介绍springboot项目如何开启https服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录springboot项目开启https服务1. 生成SSL证书密钥库使用keytool生成自签名证书将

Java使用ANTLR4对Lua脚本语法校验详解

《Java使用ANTLR4对Lua脚本语法校验详解》ANTLR是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件,下面就跟随小编一起看看Java如何使用ANTLR4对Lua脚本... 目录什么是ANTLR?第一个例子ANTLR4 的工作流程Lua脚本语法校验准备一个Lua Gramm

SpringMVC获取请求参数的方法

《SpringMVC获取请求参数的方法》:本文主要介绍SpringMVC获取请求参数的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下... 目录1、通过ServletAPI获取2、通过控制器方法的形参获取请求参数3、@RequestParam4、@

SpringValidation数据校验之约束注解与分组校验方式

《SpringValidation数据校验之约束注解与分组校验方式》本文将深入探讨SpringValidation的核心功能,帮助开发者掌握约束注解的使用技巧和分组校验的高级应用,从而构建更加健壮和可... 目录引言一、Spring Validation基础架构1.1 jsR-380标准与Spring整合1

鸿蒙中Axios数据请求的封装和配置方法

《鸿蒙中Axios数据请求的封装和配置方法》:本文主要介绍鸿蒙中Axios数据请求的封装和配置方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.配置权限 应用级权限和系统级权限2.配置网络请求的代码3.下载在Entry中 下载AxIOS4.封装Htt

鸿蒙中@State的原理使用详解(HarmonyOS 5)

《鸿蒙中@State的原理使用详解(HarmonyOS5)》@State是HarmonyOSArkTS框架中用于管理组件状态的核心装饰器,其核心作用是实现数据驱动UI的响应式编程模式,本文给大家介绍... 目录一、@State在鸿蒙中是做什么的?二、@Spythontate的基本原理1. 依赖关系的收集2.

springboot filter实现请求响应全链路拦截

《springbootfilter实现请求响应全链路拦截》这篇文章主要为大家详细介绍了SpringBoot如何结合Filter同时拦截请求和响应,从而实现​​日志采集自动化,感兴趣的小伙伴可以跟随小... 目录一、为什么你需要这个过滤器?​​​二、核心实现:一个Filter搞定双向数据流​​​​三、完整代码