HarmonyOS 鸿蒙Next中如何跳过SSL认证或证书

HarmonyOS 鸿蒙Next中如何跳过SSL认证或证书

如何跳过SSL认证或证书

9 回复

【问题背景】

  • 如何跳过SSL认证?
  • 如何明文http请求?
  1. 核心功能分类及版本支持:
功能分类 关键功能示例 起始支持 API 版本
基础功能 设置请求方式、超时时间(连接 / 读取)、HTTP 头、响应数据类型、并发优先级、缓存、协议类型(HTTP 1.1/2/3)等 6、9、11 等
代理设置 启用系统默认代理或自定义 HttpProxy 10
证书验证 自定义 CA 证书路径、客户端证书传输、跳过 SSL 校验、证书锁定配置 10、11、12、18
DNS 设置 HTTPS 协议 DNS 解析、指定最多 3 个 DNS 服务器(IPv4/IPv6) 11
数据范围 / 表单 下载起止位置、多部分表单数据(文件上传) 11
  1. 模块选择说明:HTTP 模块提供标准网络能力,Remote Communication Kit 提供场景化能力,开发者可按需选择。

配置证书校验(HTTPS 场景)

1. 证书锁定(仅信任指定证书)

  • 两种实现方式
    1. 预置应用级证书:将 crt/pem 格式证书预置到应用,在配置文件中关联服务器域名。
    2. 预置证书公钥哈希值:通过 OpenSSL 命令提取证书公钥、转换格式并计算 SHA256 哈希(base64 编码),在配置中指定哈希值。
  • 配置文件路径src/main/resources/base/profile/network_config.json
  • 关键命令示例
    • 获取域名证书:openssl s_client -servername 域名 -connect 域名:443 < /dev/null | sed -n "/-----BEGIN/,/-----END/p" > 证书文件名.pem(Windows 需替换 /dev/null 为 NUL)。
    • 计算公钥哈希:提取公钥→转换为 der 格式→计算 SHA256 并 base64 编码。

2. 配置不信任用户安装的 CA 证书

  • 系统默认信任 “系统预置 CA + 用户安装 CA”,可通过配置关闭用户 CA 信任以提升安全性:
{
  "network-security-config": {...},
  "trust-global-user-ca": false, // 禁用企业/设备管理员安装的CA
  "trust-current-user-ca": false  // 禁用当前用户安装的CA
}

3. 明文 HTTP 访问权限配置

  • 配置优先级:组件配置(component-config)> 域名配置(domain-config)> 基础配置(base-config)。
  • 核心字段cleartextTrafficPermitted(true 允许明文 HTTP,false 禁止,默认 true),可针对应用全局、特定域名或组件(如 Network Kit、ArkWeb)单独配置。

相关文档:配置证书校验

更多关于HarmonyOS 鸿蒙Next中如何跳过SSL认证或证书的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


设置remoteValidation参数

在API 18及以上版本中,发起HTTP请求时设置HttpRequestOptions.remoteValidationskip,可跳过服务端证书验证:

api文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-http#httprequestoptions

import http from '@ohos.net.http';
let httpClient = http.createHttp();
let requestOptions = {
  method: http.RequestMethod.GET,
  url: 'https://example.com',
  remoteValidation: 'skip' // 关键参数
};
httpClient.request(requestOptions).then((response) => {});

用postman能跳过证书吗?

在API18及以上版本中,http模块支持忽略SSL证书认证过程。可通过设置参数HttpRequestOptions中的remoteValidation为skip,以跳过验证服务端证书。

参考地址

https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-http#remotevalidation18

加油,

HTTPS协议必须有SSL证书

不能,

在HarmonyOS Next中,可通过配置网络模块跳过SSL证书验证。使用@ohos.net.http模块创建HttpClient实例,在sslOptions中设置clientCertcaCert'system'或指定可信证书,并将useDefaultTrustManager设为true。若需完全跳过验证,需自定义TrustManager实现空验证逻辑,但此操作会降低安全性,仅建议在开发测试环境中使用。

在HarmonyOS Next中,跳过SSL认证或证书验证通常涉及修改网络请求的安全配置,但强烈不建议在生产环境中这样做,因为它会显著降低应用的安全性,容易导致中间人攻击和数据泄露。

对于开发或测试场景,可以通过以下方式实现:

  1. 使用自定义X509TrustManager(基于Java开发):

    • 创建一个实现X509TrustManager的类,在checkServerTrusted方法中不做任何验证操作(留空)。
    • 在初始化SSLContext时使用这个自定义的TrustManager。
  2. 配置OkHttpClient(如使用OkHttp库):

    • 设置一个所有证书都信任的TrustManager。
    • 示例代码:
      TrustManager[] trustAllCerts = new TrustManager[]{
          new X509TrustManager() {
              @Override
              public void checkClientTrusted(X509Certificate[] chain, String authType) {}
              @Override
              public void checkServerTrusted(X509Certificate[] chain, String authType) {}
              @Override
              public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[]{}; }
          }
      };
      SSLContext sslContext = SSLContext.getInstance("SSL");
      sslContext.init(null, trustAllCerts, new SecureRandom());
      OkHttpClient client = new OkHttpClient.Builder()
          .sslSocketFactory(sslContext.getSocketFactory(), (X509TrustManager)trustAllCerts[0])
          .hostnameVerifier((hostname, session) -> true)
          .build();
      
  3. 对于WebView组件

    • 重写onReceivedSslError方法,调用handler.proceed()忽略SSL错误:
      webView.setWebViewClient(new WebViewClient() {
          @Override
          public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
              handler.proceed(); // 忽略证书错误
          }
      });
      

注意:这些方法仅适用于开发测试。发布应用前务必移除相关代码,确保使用有效的SSL证书和标准验证流程,以保障用户数据安全。HarmonyOS Next的安全机制设计旨在保护系统和用户,绕过这些机制可能导致应用审核不通过或功能限制。

回到顶部