HarmonyOS鸿蒙Next中SSL的问题:自建的就不好访问,像局域网内的SSL是IP的不是认证的

HarmonyOS鸿蒙Next中SSL的问题:自建的就不好访问,像局域网内的SSL是IP的不是认证的 【问题描述】:现在要访问内部的局域网的设备现在都是https访问,但如果是https域名正常都是有机构认证的,是可以正常访问的。但如果是局域网的设备是IP地址的,正常都是https://192.168.1.x类似这样,比如控制华为的智慧屏,也是有HTTPS的接口,但这个也会存在这样的问题,就没办法访问,之前用安卓或其它环境的开发都会有SSL忽略,有什么能解决的方案吗

【问题现象】:就是像这种 cke_1441.png

【版本信息】:NA

【复现代码】:NA

【尝试解决方案】:NA


更多关于HarmonyOS鸿蒙Next中SSL的问题:自建的就不好访问,像局域网内的SSL是IP的不是认证的的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

您这边可以使用axios三方库或者rcp的方式跳过SSL证书校验

【背景知识】

  • 使用axios2.2.7-rc.0及以上的版本,API18+,支持配置remoteValidation为skip实现跳过校验,参考ohos_axios开源库文档约束与限制
  • rcp(Remote Communication Kit)提供http请求服务,且可以通过配置SecurityConfiguration中的remoteValidation为skip实现跳过校验。

【解决方案】 为了安全考虑,除特殊情况,一般不建议跳过SSL校验,如果必须跳过,推荐如下两种方案。

  1. 可通过配置SecurityConfiguration中的remoteValidation字段设置校验服务端证书方式,默认值为system,表示使用系统CA验证远端服务器身份,值为skip时表示跳过验证远端服务器身份流程。相关模块导入与核心发送请求代码如下:

    import { rcp } from '@kit.RemoteCommunicationKit';
    import { BusinessError } from '@kit.BasicServicesKit';
    
    const session = rcp.createSession();
    // 真实使用中请将Request中的地址替换为正式地址
    const request = new rcp.Request('xxx.xxx.xxx', 'GET');
    request.configuration = {
      security: {
        remoteValidation: 'skip',
      },
    };
    session.fetch(request).then((rep: rcp.Response) => {
      console.info(`Response succeeded: ${rep}`);
    }).catch((err: BusinessError) => {
      console.error(`Response err: Code is ${err.code}, message is ${err.message}`);
    });
    
  2. 参考ohos_axios开源库文档配置使用系统CA或跳过验证远程服务器CA18+,将请求配置中的remoteValidation字段配置为skip以跳过CA证书验证,从而达到忽略SSL校验的目的。

【总结】 Network Kit不支持忽略证书,axios底层是基于Network Kit实现的,API18+才支持支持忽略证书。如需忽略,可使用rcp,或在API18+中使用axios2.2.7-rc.0及以上的版本。

更多关于HarmonyOS鸿蒙Next中SSL的问题:自建的就不好访问,像局域网内的SSL是IP的不是认证的的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,自建SSL证书(如局域网IP证书)默认不被信任,需手动导入证书到系统信任库。使用ArkTS的@ohos.net.http模块时,需在securityOptions中配置caPath指向证书文件路径。若使用Web组件,需在WebAttribute中设置onSslErrorEvent处理证书验证异常。

在HarmonyOS Next中,访问使用IP地址的自签名SSL证书的HTTPS服务(如局域网设备),确实会因为证书验证失败而无法连接。这与Android上常见的“SSL忽略”或“信任所有证书”方案有本质区别,HarmonyOS Next出于更强的安全设计,不提倡也不提供直接关闭证书验证的简易方法。

核心原因是:系统或应用的网络安全配置(Network Security Configuration)会严格校验服务器证书。对于IP地址签发的证书或自签名证书,默认的信任链验证会失败。

可行的解决方案如下:

  1. 将自签名证书安装到系统或应用的CA信任库中(推荐) 这是最符合安全规范的做法。您需要获取局域网设备HTTPS服务所使用的自签名证书(通常是.crt.pem文件),然后将其打包到您的HarmonyOS应用中,并在应用的config.json文件中进行配置,使其被应用信任。具体步骤涉及在应用的resources/rawfile目录放置证书文件,并在代码中通过SecurityManager相关API创建自定义的TrustManager来加载该证书。

  2. 在开发阶段为特定域名或IP配置调试用网络安全策略 您可以在应用的resources/rawfile目录下创建network_config.xml文件,配置调试阶段放宽的规则。例如,可以指定对某个特定的IP地址或域名关闭证书验证(通过cleartextTrafficPermitted和自定义的trust-anchors设置)。请注意,这仅适用于开发调试阶段,正式发布的应用不应使用此配置。

  3. 修改服务器端配置,使用可被信任的证书 如果可能,为局域网设备配置由公共信任的CA签发的证书,即使是针对内网IP或域名。目前有一些CA提供免费或针对内网的证书签发服务。这是最一劳永逸的方案,但取决于设备是否支持。

关键点: HarmonyOS Next的ArkTS/ArkUI开发中,网络请求(如使用@ohos.net.http)的SSL行为由系统安全策略管理。您无法像在旧版Android中那样,通过一个简单的OkHttpClient配置就全局忽略SSL错误。必须通过上述证书预置或安全策略配置的方式,显式地建立信任关系。

对于您提到的控制华为智慧屏这类场景,建议优先采用方案1,即获取设备的自签名证书并集成到您的应用中。如果该设备是华为生态产品,也可以查阅其对应的开发者文档,看是否提供了官方的SDK或推荐的证书处理方式。

回到顶部