HarmonyOS 鸿蒙Next中如何跳过SSL认证或证书
HarmonyOS 鸿蒙Next中如何跳过SSL认证或证书
如何跳过SSL认证或证书
【问题背景】
- 如何跳过SSL认证?
- 如何明文http请求?
- 核心功能分类及版本支持:
| 功能分类 | 关键功能示例 | 起始支持 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 |
- 模块选择说明:HTTP 模块提供标准网络能力,Remote Communication Kit 提供场景化能力,开发者可按需选择。
配置证书校验(HTTPS 场景)
1. 证书锁定(仅信任指定证书)
- 两种实现方式:
- 预置应用级证书:将 crt/pem 格式证书预置到应用,在配置文件中关联服务器域名。
- 预置证书公钥哈希值:通过 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.remoteValidation为skip,可跳过服务端证书验证:
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中设置clientCert和caCert为'system'或指定可信证书,并将useDefaultTrustManager设为true。若需完全跳过验证,需自定义TrustManager实现空验证逻辑,但此操作会降低安全性,仅建议在开发测试环境中使用。
在HarmonyOS Next中,跳过SSL认证或证书验证通常涉及修改网络请求的安全配置,但强烈不建议在生产环境中这样做,因为它会显著降低应用的安全性,容易导致中间人攻击和数据泄露。
对于开发或测试场景,可以通过以下方式实现:
-
使用自定义X509TrustManager(基于Java开发):
- 创建一个实现
X509TrustManager的类,在checkServerTrusted方法中不做任何验证操作(留空)。 - 在初始化SSLContext时使用这个自定义的TrustManager。
- 创建一个实现
-
配置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();
-
对于WebView组件:
- 重写
onReceivedSslError方法,调用handler.proceed()忽略SSL错误:webView.setWebViewClient(new WebViewClient() { @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { handler.proceed(); // 忽略证书错误 } });
- 重写
注意:这些方法仅适用于开发测试。发布应用前务必移除相关代码,确保使用有效的SSL证书和标准验证流程,以保障用户数据安全。HarmonyOS Next的安全机制设计旨在保护系统和用户,绕过这些机制可能导致应用审核不通过或功能限制。


