iOS App 网络请求虽然用 HTTPS,但是像 Charles 专业抓包工具还是可以获取数据的,所以求一种比较合理的方案

2018-08-14 18:38:50 +08:00
 stephenliubp
7092 次点击
所在节点    iDev
11 条回复
CDuXZMAPgHp1q9ew
2018-08-14 19:52:40 +08:00
中间人攻击, 客户端校验证书可破
MrMario
2018-08-14 20:03:33 +08:00
证书校验:
客户端预置服务端证书(其实只要一个哈希就可以了)
客户端网络库或者其他基础组件上,加上这个哈希校验,拒绝哈希不一致的请求

注意证书更换升级等(可以考虑多买几张证书)
snail1988
2018-08-14 20:30:08 +08:00
什么目的 防止 用户抓包?还是防止中间第三人抓包
中间人 搜索一个概念 ssl-pinning
防用户没有什么可行手段
kwest
2018-08-14 21:27:30 +08:00
用 HTTPS 却不去校验证书就是耍流氓。
junbaor
2018-08-15 10:14:39 +08:00
双向认证了解一下
stephenliubp
2018-08-15 10:52:20 +08:00
@snail1988 对,防止抓包,但是我写了 ssl-pinning 的代码测试过还是可以抓包的。

``` Objective-c

+ (AFSecurityPolicy*)customSecurityPolicy
{
NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"https12" ofType:@"cer"];
NSData *certData = [NSData dataWithContentsOfFile:cerPath];
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
securityPolicy.allowInvalidCertificates = NO;
securityPolicy.validatesDomainName = YES;
securityPolicy.pinnedCertificates = @[certData];

return securityPolicy;
}

+ (void)postUploadWithUrl:(NSString *)urlStr para:(NSDictionary *)para name:(NSString *)name fileData:(NSData *)fileData fileName:(NSString *)fileName fileType:(NSString *)fileType success:(void (^)(id responseObject))success fail:(void (^)(void))fail
{

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.securityPolicy = [AFNetPackage customSecurityPolicy];
[manager POST:urlStr parameters:para constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
[formData appendPartWithFileData:fileData name:name fileName:fileName mimeType:fileType];
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nonnull responseObject) {
if (success) {
success(responseObject);
}
} failure:^(NSURLSessionDataTask * _Nonnull task, NSError * _Nonnull error) {
if (fail) {
fail();
}
}];
}
```
stephenliubp
2018-08-18 11:03:15 +08:00
数据安全方面给个推荐:Web 端: https://github.com/FantasticLBP/Anti-WebSpider。App 端:ssl 证书双向认证防止 抓包工具抓包;数据 RSA 加密;接口防重放
AwayEM
2018-08-25 22:49:22 +08:00
双向认证用越狱机也是有办法看到内容的...
stephenliubp
2018-08-25 22:50:37 +08:00
@AwayEM 数据 RSA 加密了
Daniate
2018-08-26 20:40:55 +08:00
试试把 NSURLSessionConfiguration 的 connectionProxyDictionary 属性设置成 @{}
stephenliubp
2018-08-27 09:13:03 +08:00
@Daniate 嗯,早期用这个,后来换成“ ssl 证书双向认证;数据 RSA 加密;接口防重放“。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/479782

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX