ssl新闻资讯

文档中心

AFNHTTPS鏃犺瘉涔﹂獙璇侀闄╄瑙d笌瀹夊叏鍔犲浐鎸囧崡

时间 : 2025-09-27 15:39:56浏览量 : 3

2AFNHTTPS鏃犺瘉涔﹂獙璇侀闄╄瑙d笌瀹夊叏鍔犲浐鎸囧崡

****

在移动开发中,AFN(iOS网络库)常被用于处理HTTPS请求。但开发者若为图省事关闭证书验证(即“无证书”模式),会埋下严重安全隐患。本文用通俗案例解析风险原理,并提供3种专业解决方案。

一、什么是“无证书HTTPS”?

当AFN配置`AFSecurityPolicy.allowInvalidCertificates = YES`时,客户端会接受任何服务器证书(包括伪造的)。这相当于现实中有人自称警察,你连证件都不看就相信他。

典型场景举例

某外卖App为兼容测试环境关闭验证,上线后忘记修改配置。攻击者通过公共WiFi伪造服务器证书,轻松窃取用户账号密码。

二、无证书模式的四大风险

1. 中间人攻击(MITM)

攻击原理

好比快递员调包你的包裹。黑客在用户与服务器之间插入代理设备:

- 第1步:诱导连接恶意WiFi(如“Starbucks-Free”)

- 第2步:伪造银行网站证书

- 第3步:拦截所有交易数据

真实案例:2025年某银行App因未校验证书,导致2000+用户遭受钓鱼攻击。

2. 数据篡改风险

未加密的API响应可能被篡改。例如:

- 正常返回商品价格100元 → 黑客改为1元 → 用户低价下单造成损失

3. APPStore审核被拒

苹果明确要求必须启用HTTPS证书校验(ATS规范),否则可能被下架。

4. 合规性违规

GDPR、等保2.0等法规均要求数据传输加密验证,违规可能面临高额罚款。

三、专业级解决方案

?? 方案1:正确配置证书校验(推荐)

```objc

// AFN安全配置示例

AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModePublicKey];

policy.pinnedCertificates = [AFSecurityPolicy certificatesInBundle:[NSBundle mainBundle]];

policy.allowInvalidCertificates = NO; //必须设为NO!

manager.securityPolicy = policy;

```

效果:只信任预置在App内的证书,类似公司门禁只认员工卡。

?? 方案2:域名白名单校验

// 增加域名匹配验证

policy.validatesDomainName = YES;

防止攻击者使用其他域名的合法证书(比如用*.github.com的证书仿冒你的API)。

?? 方案3:动态证书下发(高级用法)

企业级App可通过接口获取最新CA证书并缓存,平衡安全与灵活性。流程如下:

[安全服务器] --(加密通道)--> [下发新证书] --> [APP本地存储] --> [下次请求启用校验]

四、测试环境安全实践

很多开发者关闭校验是为了方便测试,其实有更安全的做法:

1. 开发阶段:使用自签名证书 + AFN预埋测试证书

```objc

policy.pinnedCertificates = @[testCertificate]; //仅信任测试CA

```

2. 自动化构建脚本自动切换配置:

```sh

DEBUG模式使用测试证书

if [ "$CONFIGURATION" == "Debug" ]; then

cp TestCert.cer App/Resources/

fi

五、 Checklist

? 必须做

- `allowInvalidCertificates=NO` + `validatesDomainName=YES`双保险

- iOS11+强制开启ATS(可在Info.plist中例外配置)

? 禁止做

- Production环境关闭验证

- CA根证书校验+域名校验同时关闭

?? 进阶建议

- 使用Charles/Fiddler抓包时临时开启调试模式,但需代码隔离防止误提交

通过合理配置AFN的HTTPS策略,既能保障通信安全,又避免触发系统限制。记住一个原则:“宁可让App在测试阶段多崩溃几次,也不要让它在线上被人攻破”。

TAG:afn https 无证书,app无任何证书,app无安全证书,app无证书,https证书不安全如何解决,安装无证书ipa