四、HTPPS
1、为什么有HTTPS?
http的缺点:通信使用明文,数据可以被窃听、篡改风、冒充风
2、HTTPS是什么?
HTTPS = HTTP+SSL/TSL
基于HTTP协议,通过SSL或TLS提供加密处理数据、验证对方身份以及数据完整性保护,就是安全的HTTP。
3、原理解析
为什是说HTTP是安全的,我们一步一步来分析。
-
1、我们先用对称加密进行数据加密。
image.png
1、C端用key进行加密数据后,发给S端
2、S端用key进行加密数据后,发给C端
这样做的问题:
1、S端不可能有很多key,不可能给每一个C端都配一个key,所以只好给一个key.
2、但是黑客也可以拿到这个key
-
2、用非对称加密
image.png
服务器生成私钥S_Key_S和公钥S_Key_G
1、C端用公钥进行加密,S端用私钥进行解密。
2、S端用私钥进行加密,C端用公钥进行解密。
这样做的问题:
谁都可以拿到公钥,黑客也可以,所以也不安全。
-
3、将对称加密和非对称加密结合
前期用非对称加密商量加密的key,后期用key加密。
image.png
1、C端向S端索要公钥。
2、S端向C端发送公钥
3、C端说用key进行对称加密传输,并用S_Key_G加密信息,发送给S端。
4、S端给C端发送一OK的信息。
接下来就开始用key进行加密进行数据的传输。
这样做也会出现问题,那就是会遭到中间人进行双方欺骗的问题。

1、C端向黑端索要黑_Key_G
2、黑端给了C端黑_Key_G
3、C端向S端索要S_Key_G
4、S端给了黑端S_Key_G
5、C端向黑端说用key进行对称加密传输,并用黑_Key_G进行加密传输
6、黑端说好的,此时黑端用黑_Key_S解密拿到key
7、黑端向S端说用key进行对称加密传输,并用S_Key_G进行加密传输,
8、黑端说好的
从此以后黑客就可以作为中间人,看到双方交流的信息。
-
怎么解决中间人攻击的问题?
引入一个第三方权威机构CA
image.png
1、用权_Key_S对S_Key_G进行加密,生成一个证书。
2、C端发送请求获取证书
3、C端用已经存在自己操作系统的权_Key_G对证书进行解密,获得证书里S_Key_G。
4、成功的拿到S端的公钥之后,就解决了中间人攻击的问题,C端说用key进行对称加密传输,并用S_Key_G加密信息,发送给S端。
5、S端给C端发送一OK的信息
6、接下来就开始用key进行加密进行数据的传输。
3、HTTPS在iOS 中的实现
#pragma mark - Https的使用
/*
发送请求之前先接收服务器的挑战,就是进行https的协商
1、信任服务器返回的证书(公钥)
2、客户端产生随记密钥
3、公钥对 随机密钥进行加密
4、把公钥加密后的随机密钥发送给服务器
5、使用随机密钥对数据加密和服务器交互
*/
-(void)httpsUse{
NSURL *url = [NSURL URLWithString:@"https://www.12306.cn/index/"];//请求地址
[[[NSURLSession sharedSession] dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
NSString *html = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"请求返回的数据data==%@",html);
}] resume];
}
//代理方法
-(void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential * _Nullable))completionHandler{
//判断认证方式,是用户密码,还是证书认证
if (challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust) {
//设置信任服务器的证书
NSURLCredential *credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];
completionHandler(0,credential);
}
}
五、第三方框架AFNetworking
AFNetworking是iOS中使用最多的网络框架
参考:
深入浅出HTTPS工作原理
网友评论