HarmonyOS掌上记账APP开发实践第69篇:网络通信安全 — HTTPS 配置与数据传输加密
网络通信安全 — HTTPS 配置与数据传输加密

文章简介
在移动应用中,网络通信安全是保护用户数据的最后一道防线。MoneyTrack 通过网络请求库 lib_network 封装了所有后端 API 调用,采用 HTTPS 协议确保传输过程中数据的机密性和完整性。本文从 HTTPS 证书验证、网络安全配置、Token 安全存储以及 OWASP 移动安全标准等角度,全面解析鸿蒙应用中的网络安全最佳实践。
核心知识点
1. HTTPS 通信的安全链路
从客户端发起请求到服务端返回数据,HTTPS 通信经历了一次完整的安全握手和加密传输过程:
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 通信中自动执行以下证书验证步骤:
- 证书链验证:检查服务器证书是否由受信任的 CA 签发,证书链是否完整。
- 域名匹配:证书中的
CN(通用名称)或SAN(主体备用名称)必须与请求域名匹配。 - 有效期检查:确认证书未过期且未生效。
- 吊销状态:可配置 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 测试指南
更多推荐



所有评论(0)