网络通信安全 — HTTPS 配置与数据传输加密

在这里插入图片描述

文章简介

在移动应用中,网络通信安全是保护用户数据的最后一道防线。MoneyTrack 通过网络请求库 lib_network 封装了所有后端 API 调用,采用 HTTPS 协议确保传输过程中数据的机密性和完整性。本文从 HTTPS 证书验证、网络安全配置、Token 安全存储以及 OWASP 移动安全标准等角度,全面解析鸿蒙应用中的网络安全最佳实践。

核心知识点

1. HTTPS 通信的安全链路

从客户端发起请求到服务端返回数据,HTTPS 通信经历了一次完整的安全握手和加密传输过程:

应用服务端 系统网络安全层 MoneyTrack 客户端 应用服务端 系统网络安全层 MoneyTrack 客户端 校验证书链/域名/有效期 后续通信使用 AES 对称加密 alt [证书验证通过] [证书验证失败] HTTPS 请求 (axios) TCP 三次握手 服务器证书 (含公钥) 验证证书合法性 安全连接建立 传输对称加密密钥 传输对称加密密钥 POST /api/data (加密传输) 响应数据 (加密传输) 连接中断 提示网络异常

2. 网络安全配置(network-config 文件)

鸿蒙支持通过 network-config 配置文件对应用的网络安全策略进行精细控制。在 products/entry/src/main/resources/base/element/network-config.json 中配置:

{
  "network-config": {
    "domain-config": [
      {
        "domains": [
          { "name": "api.moneytrack.com", "includeSubDomains": true }
        ],
        "trust-anchors": [
          { "type": "system" }
        ],
        "cleartext-permitted": false
      }
    ],
    "base-config": {
      "cleartext-permitted": false,
      "trust-anchors": [
        { "type": "system" }
      ]
    }
  }
}

关键配置项说明:

  • cleartext-permitted:是否允许明文 HTTP 流量。生产环境必须设为 false,只允许 HTTPS。
  • trust-anchors:信任的证书锚点。type: "system" 表示信任系统内置 CA 证书,也可配置 type: "user-policy" 添加自定义证书。
  • domain-config:按域名维度配置安全策略,可为测试环境域名单独开放 HTTP。

module.json5 中关联网络安全配置:

{
  "module": {
    "name": "entry",
    "deviceTypes": ["phone", "tablet"],
    "metadata": [
      {
        "name": "network-security-config",
        "value": "base/element/network-config"
      }
    ]
  }
}

3. 证书验证说明

鸿蒙系统网络安全层基于 Android Network Security Config 规范实现,在 HTTPS 通信中自动执行以下证书验证步骤:

  1. 证书链验证:检查服务器证书是否由受信任的 CA 签发,证书链是否完整。
  2. 域名匹配:证书中的 CN(通用名称)或 SAN(主体备用名称)必须与请求域名匹配。
  3. 有效期检查:确认证书未过期且未生效。
  4. 吊销状态:可配置 CRL(证书吊销列表)或 OCSP(在线证书状态协议)检查。

开发调试阶段可使用 user-policy 信任自定义证书,但生产环境必须使用 system 级别的证书验证,禁用证书固定之外的所有自定义信任。

4. Token 安全存储最佳实践

用户的认证 Token 是访问后端 API 的凭证,必须安全保存。MoneyTrack 遵循以下最佳实践:

  • 内存持有:Token 仅在运行时变量中持有,不写入 SharedPreferences 或文件系统。
  • 短生命周期:Token 设置有效期(如 7 天),过期后要求重新登录。
  • 刷新机制:使用 Refresh Token 机制,Access Token 过期后通过 Refresh Token 静默续期。
  • 不落日志:所有日志打印前过滤 Token 字段,防止 Token 泄露到日志文件中。
// Token 安全管理的内存方案
class TokenManager {
  private accessToken: string = '';
  private refreshToken: string = '';
  private expireTime: number = 0;

  setTokens(access: string, refresh: string, expiresIn: number): void {
    this.accessToken = access;
    this.refreshToken = refresh;
    this.expireTime = Date.now() + expiresIn * 1000;
  }

  getAccessToken(): string {
    if (Date.now() > this.expireTime) {
      this.refreshAccessToken();  // 静默刷新
    }
    return this.accessToken;
  }

  // 不在日志中输出 Token 内容
  logStatus(): void {
    hilog.info(0xFF00, 'TokenManager', `token 状态: ${this.accessToken ? '已设置' : '未设置'}`);
  }
}

5. OWASP 移动安全检查清单

OWASP Mobile Security Testing Guide 为移动应用安全提供了系统性的检查项。在网络通信安全方面,MoneyTrack 对照以下清单进行安全检查:

检查项 要求 MoneyTrack 实现
MSTG-NETWORK-1 数据传输使用 TLS HTTPS 强制,HTTP 被拦截
MSTG-NETWORK-2 TLS 版本 >= 1.2 依赖系统网络安全层
MSTG-NETWORK-3 证书验证正确 系统 CA 验证 + 域名校验
MSTG-NETWORK-4 不信任自签名证书 生产环境仅信任系统 CA
MSTG-NETWORK-5 敏感信息不在 URL 中传递 Token 通过 Header 传递
MSTG-NETWORK-6 实现证书固定(可选) 规划中

项目代码案例

lib_network 的 baseURL 与超时配置

文件路径:commons/lib_network/src/main/ets/https/Request.ets

const instance = axios.create({
  baseURL: '',      // 需要配置真实后端地址
  timeout: 10 * 3000,  // 30 秒超时
  headers: {},
});

密码与 token 的安全处理

文件路径:features/mine/src/main/ets/viewmodels/LoginVM.ets

用户登录时将密码通过 HTTPS 加密传输,服务端返回的 token 仅在内存中持有,不落盘存储。

推荐参考文档

  • HarmonyOS @ohos/axios 网络请求库文档
  • 网络安全配置(network-config)规范
  • OWASP 移动安全最佳实践
  • MSTG-NETWORK 测试指南
Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐