【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 } });

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/854828.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MyBatis查询两个字段,返回Map,一个字段作为key,一个字段作为value的实现

项目场景: 在使用MyBatis,我们经常会遇到这种情况:SELECT两个字段,需要返回一个Map,其中第一个字段作为key,第二个字段作为value。MyBatis的MapKey虽然很实用,但并不能解决这种场景。 问题描述 …

编程大赛的题怎么做:策略、技巧与实战经验

编程大赛的题怎么做:策略、技巧与实战经验 编程大赛,作为一场集智慧、技巧与实战经验于一体的较量,吸引了无数编程爱好者的参与。然而,面对复杂多变的题目和激烈的竞争环境,如何有效地解题并脱颖而出,成为…

【Unity】向量应用:已知入射方向和法向量求反射方向(跳弹系统)

文章目录 已知入射方向和法向量求反射方向已知条件解题思路代码范例 已知入射方向和法向量求反射方向 已知条件 已知入射向量v1和法向量n(OB),求反射向量v2,上述向量均为单位向量。 解题思路 设 AO为 v1 ;OB为 n …

ABAP随笔记

1:/nsxi_monitor查看接口日志 2:内表数据拼接 2.1、给内表加一个空行并修改他的值 APPEND INITIAL LINE TO GT_ALV ASSIGNING FIELD-SYMBOL(<FS>) .2.2、将内表数据拼接在一行 CONCATENATE LINES

外贸独立站做了没效果怎么办

如果外贸独立站做了但没有达到预期的效果&#xff0c;可以考虑以下几个方面来进行优化和改进&#xff1a; 1. 优化网站内容&#xff1a;确保网站内容高质量、专业且符合目标市场的需求。更新内容以保持网站的活跃度和相关性。 2. 搜索引擎优化(SEO)&#xff1a;对网站进行SEO…

实验13 BGP路径选择

实验13 BGP路径选择 一、 原理描述二、 实验目的三、 实验内容四、 实验配置五、 实验步骤 一、 原理描述 与域内路由不同&#xff0c;域间路由更加注重策略&#xff0c;而不是技术。在域内进行选路&#xff0c;可以使用路由算法计算出到达目的子网的最短路径&#xff1b;而在…

如何完美解决 Oracle Database 19c 安装程序 - 第7步(共8步)卡住,半小时都不动

&#x1f680; 如何完美解决 Oracle Database 19c 安装程序 - 第7步&#xff08;共8步&#xff09;卡住&#xff0c;半小时都不动 摘要 在安装 Oracle Database 19c 时&#xff0c;很多用户会在第7步&#xff08;共8步&#xff09;遇到卡住的问题&#xff0c;尤其是安装程序长…

行业模板|DataEase应用平台对接大屏模板推荐

DataEase开源数据可视化分析工具于2022年6月发布模板市场&#xff08;https://templates-de.fit2cloud.com&#xff09;&#xff0c;并于2024年1月新增适用于DataEase v2版本的模板分类。模板市场旨在为DataEase用户提供专业、美观、拿来即用的大屏模板&#xff0c;方便用户根据…

Spring框架的最新进展:2023年Spring Boot和Spring Cloud功能更新

引用 Spring框架的最新动态&#xff1a;2023年Spring Boot与Spring Cloud功能升级 Spring框架作为Java开发领域的重要技术之一&#xff0c;一直致力于简化开发流程和提高开发效率。2023年&#xff0c;Spring Boot和Spring Cloud两大核心组件再次迎来功能升级&#xff0c;为开…

【杂记-浅谈虚拟类型终端VTY用户界面】

一、VTY概述 VTY是Virtual Teletype Terminal的缩写&#xff0c;指的是路由器或交换机的远程登录的虚拟端口。这些虚拟端口允许用户通过Telnet或SSH协议连接到网络设备进行管理和维护操作。 user-interface vty 是华为设备中的一个重要配置命令&#xff0c;主要用于配置虚拟类…

哪个充电宝牌子好用又实惠?盘点四大平价充电宝分享

在当今快节奏的生活中&#xff0c;充电宝已成为我们日常生活中不可或缺的一部分。然而&#xff0c;面对市场上琳琅满目的充电宝品牌和型号&#xff0c;许多消费者误以为选择容量越大、价格越高的充电宝就是最好的选择。实际上&#xff0c;买充电宝并不是一味追求高容量和高价格…

深入解析知识付费平台的核心功能模块:满足个性化学习需求的数字化教育新星

在数字化学习的大潮中&#xff0c;知识付费平台已成为教育行业的一颗新星&#xff0c;它以满足用户需求为核心&#xff0c;提供便捷高效的学习渠道。该平台汇聚了各类专业知识&#xff0c;覆盖职业技能、生活兴趣和人文社科等多个领域&#xff0c;满足不同用户的学习需求。同时…

laravel Blade 指令的趣味性

首先,我们通过几个要点来解释 Blade 引擎的工作原理。 您选择一个 Blade 模板进行渲染。引擎使用一系列正则表达式来解析和编译模板。该引擎生成一个普通的 PHP 文件并将其写入磁盘(以便将其缓存以供将来渲染)。包含 PHP 文件并使用输出缓冲区来捕获生成的 HTML。该过程中最…

【scrapy】爬虫,从429状态码说起

许久未爬&#xff0c;发现爬不动了&#xff0c;哈哈哈&#xff0c;记录下这次失败的爬取经历 问题描述 针对这样的一个网站&#xff1a; https://www.farfetch.cn/cn/shopping/women/dresses-1/items.aspx?page1&view96&sort3 需求&#xff1a; 1.需要爬取列表页…

TOP10!YashanDB斩获广东省优秀信创产品与解决方案双料荣誉

近日&#xff0c;2024广东软件风云榜结果出炉&#xff0c;表彰为广东软件产业和数字经济、新型工业化发展作出突出贡献的企业、企业家、优秀产品等。深算院崖山数据库系统 YashanDB荣获广东省“2024年优秀信息技术应用创新产品TOP10”和“2024年优秀信息技术应用创新行业应用解…

java 对象实际占用内存大小预估工具类ObjectSizeUtil

java 对象实际占用内存大小预估工具类 返回对象占用预估字节数 返回字节数对应格式化后的字符串&#xff08;xx Kb&#xff09; 使用效果 依赖了lombock和hutool&#xff0c;项目不用这个可以去掉日志&#xff0c;稍微改写一下。 import cn.hutool.core.util.ClassUtil; i…

JavaScript中的Function

** 一、Function ** 什么是&#xff1a; 用途&#xff1a;保存一段可重用的代码段的程序结构&#xff0c;再起一个名字。本质&#xff1a;内存中保存一段代码段的存储空间------对象为什么&#xff1a;只要一段代码&#xff0c;可能被反复使用时&#xff0c;都要定义在一个函…

Shell 学习笔记 - 变量的删除、替换和替代 + 变量中的特殊符号

1.9 Shell 变量的删除、替换和替代 Linux 提供一些可以直接对变量进行操作的符号。通过这些符号&#xff0c;变量中的部分内容可以被删除、替换和替代。在 Shell 中&#xff0c;变量的删除、替换和替代也是非常重要的。通过简单操作修改变量&#xff0c;可以减少代码的行数并提…

docker怎么拉取全部镜像,打包所有镜像

因为docker&#xff0c;所以我把电脑上之前的镜像全部打包出来了 你们也可以打包&#xff0c;我提供一个脚本&#xff0c;你运行即可 export_docker.sh #!/bin/bash# 导出目录 EXPORT_DIR"docker_images_backup" mkdir -p "$EXPORT_DIR"# 获取所有镜像 …

编程第一课名字怎么写:创意、吸引力与实用性的完美结合

编程第一课名字怎么写&#xff1a;创意、吸引力与实用性的完美结合 在编程教育的世界里&#xff0c;为第一课起一个引人入胜的名字至关重要。这个名字不仅要能够吸引学生的注意&#xff0c;还要能够准确地传达课程的核心内容和价值。那么&#xff0c;如何为编程第一课起一个既…