美文网首页
iOS-网络学习2

iOS-网络学习2

作者: 快乐的tomato | 来源:发表于2021-08-23 20:05 被阅读0次

四、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进行加密进行数据的传输。

这样做也会出现问题,那就是会遭到中间人进行双方欺骗的问题。

image.png

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工作原理

相关文章

网友评论

      本文标题:iOS-网络学习2

      本文链接:https://www.haomeiwen.com/subject/hsnfiltx.html