文档中心
AFNetworkingSSL璇佷功閰嶇疆鍏ㄦ寚鍗梚OS寮€鍙戝繀鐭ョ殑瀹夊叏瑕佺偣
时间 : 2025-09-27 15:39:56浏览量 : 3

在移动应用开发中,网络安全是重中之重。作为iOS开发者,你可能经常使用AFNetworking这个强大的网络库来处理HTTP请求。但你是否知道,如果SSL证书配置不当,你的应用可能会面临中间人攻击(MITM)和数据泄露的风险?本文将用大白话带你彻底搞懂AFNetworking中的SSL证书机制,并通过实际案例教你如何正确配置。
一、SSL证书是什么?为什么它如此重要?
想象你要给朋友寄一封机密信件。SSL证书就像是一个防篡改的信封+邮局公章的组合:
1. 身份认证:公章证明这确实是你朋友的地址(服务端真实性)
2. 加密传输:信封保证只有收件人能拆开(数据传输加密)
如果没有SSL证书:
- 黑客可以伪装成你的银行APP(中间人攻击)
- 你在星巴克连WiFi时发的密码可能被隔壁桌截获
二、AFNetworking处理SSL的三种典型方式
1. 默认宽松模式(危险!)
```objectivec
// ?? 相当于完全不检查邮局公章
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.securityPolicy.allowInvalidCertificates = YES; // 接受假证书
manager.securityPolicy.validatesDomainName = NO; // 不验证域名
```
风险案例:某金融APP曾因此被黑客用自签名证书截获了2000+用户的银行卡号。
2. 系统默认严格模式(推荐基础版)
// ? 系统自动检查CA颁发的有效证书
manager.securityPolicy = [AFSecurityPolicy defaultPolicy];
这会验证:
- 证书是否由受信任的CA机构(如DigiCert)签发
- 当前访问域名是否匹配证书中的域名
3. 自定义证书绑定模式(最高安全)
// ?? 只认你指定的"专属公章"
NSString *certPath = [[NSBundle mainBundle] pathForResource:@"my_company" ofType:@"cer"];
NSData *certData = [NSData dataWithContentsOfFile:certPath];
NSSet *certSet = [NSSet setWithObject:certData];
manager.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate
withPinnedCertificates:certSet];
适用场景:
- ***/军队APP需要杜绝所有CA被冒用的可能
- IoT设备与专用服务器通信
三、开发者最常踩的5个坑(附解决方案)
? 坑1:测试环境用了自签名证书却忘记配置
// ?正确做法:
ifdef DEBUG
policy.allowInvalidCertificates = YES;
else
policy.allowInvalidCertificates = NO;
endif
? 坑2:证书过期导致大面积崩溃
2025年某电商APP因Let's Encrypt证书过期导致支付功能瘫痪2小时
预防方案:
```swift
// OCSP Stapling检查(iOS13+)
policy.validateStapledCertificateChain = YES;
? 坑3:没有处理ATS例外
苹果要求所有连接必须使用HTTPS,特殊情况需在Info.plist声明:
```xml
? 坑4:忽略证书吊销状态
2025年某快递APP因未检查CRL列表,遭到已吊销证书攻击
升级方案:
policy.pinnedCertificates = [self loadCRLCheckedCerts];
? 坑5:混合使用HTTP/HTTPS时配置冲突
建议统一重定向:
manager.requestSerializer.HTTPShouldHandleCookies = YES;
manager.responseSerializer.acceptableStatusCodes = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(200, 500)];
四、高级技巧:动态更新证书不用发版
通过服务端下发热更新配置:
// JSON示例:
{
"pin_sha256": "aAbBcC...==",
"expire_date": "2025-12-31"
}
// App启动时执行:
[self updateSSLPinningConfigFromServer];
五、终极安全方案 Checklist
1. [ ] Production环境必须禁用`allowInvalidCertificates`
2. [ ] Info.plist正确配置ATS例外域
3. [ ] CER文件设置为Copy Bundle Resources
4. [ ] HTTPS重定向状态码处理301/302
5. [ ] CRL/OCSP至少实现一种吊销检查
通过以上措施,你的APP安全性将超过90%的同类应用。记住:网络安全没有银弹,但正确的SSL配置是最基础的防护盾牌。
TAG:afnetworking ssl证书,app ssl证书,ssl ca cert,ssl证书cer,官网ssl证书