【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

相关文章

python运用requests模拟浏览器发送请求过程

《python运用requests模拟浏览器发送请求过程》模拟浏览器请求可选用requests处理静态内容,selenium应对动态页面,playwright支持高级自动化,设置代理和超时参数,根据需... 目录使用requests库模拟浏览器请求使用selenium自动化浏览器操作使用playwright

SpringBoot监控API请求耗时的6中解决解决方案

《SpringBoot监控API请求耗时的6中解决解决方案》本文介绍SpringBoot中记录API请求耗时的6种方案,包括手动埋点、AOP切面、拦截器、Filter、事件监听、Micrometer+... 目录1. 简介2.实战案例2.1 手动记录2.2 自定义AOP记录2.3 拦截器技术2.4 使用Fi

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束

SpringBoot中如何使用Assert进行断言校验

《SpringBoot中如何使用Assert进行断言校验》Java提供了内置的assert机制,而Spring框架也提供了更强大的Assert工具类来帮助开发者进行参数校验和状态检查,下... 目录前言一、Java 原生assert简介1.1 使用方式1.2 示例代码1.3 优缺点分析二、Spring Fr

华为鸿蒙HarmonyOS 5.1官宣7月开启升级! 首批支持名单公布

《华为鸿蒙HarmonyOS5.1官宣7月开启升级!首批支持名单公布》在刚刚结束的华为Pura80系列及全场景新品发布会上,除了众多新品的发布,还有一个消息也点燃了所有鸿蒙用户的期待,那就是Ha... 在今日的华为 Pura 80 系列及全场景新品发布会上,华为宣布鸿蒙 HarmonyOS 5.1 将于 7

在Spring Boot中实现HTTPS加密通信及常见问题排查

《在SpringBoot中实现HTTPS加密通信及常见问题排查》HTTPS是HTTP的安全版本,通过SSL/TLS协议为通讯提供加密、身份验证和数据完整性保护,下面通过本文给大家介绍在SpringB... 目录一、HTTPS核心原理1.加密流程概述2.加密技术组合二、证书体系详解1、证书类型对比2. 证书获

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1

Python FastAPI实现JWT校验的完整指南

《PythonFastAPI实现JWT校验的完整指南》在现代Web开发中,构建安全的API接口是开发者必须面对的核心挑战之一,本文将深入探讨如何基于FastAPI实现JWT(JSONWebToken... 目录一、JWT认证的核心原理二、项目初始化与环境配置三、安全密码处理机制四、JWT令牌的生成与验证五、

Spring Validation中9个数据校验工具使用指南

《SpringValidation中9个数据校验工具使用指南》SpringValidation作为Spring生态系统的重要组成部分,提供了一套强大而灵活的数据校验机制,本文给大家介绍了Spring... 目录1. Bean Validation基础注解常用注解示例在控制器中应用2. 自定义约束验证器定义自

Spring Boot Controller处理HTTP请求体的方法

《SpringBootController处理HTTP请求体的方法》SpringBoot提供了强大的机制来处理不同Content-Type​的HTTP请求体,这主要依赖于HttpMessageCo... 目录一、核心机制:HttpMessageConverter​二、按Content-Type​处理详解1.