SSL在IOS中的应用

本文介绍了SSL在IOS应用中的实现,主要利用CocoaAsyncSocket这一开源框架,详细讲解了客户端和服务端的创建步骤,包括连接、数据处理、SSL/TLS传输以及心跳连接的建立。此外,还讨论了解决数据粘包问题的几种方法。
摘要由CSDN通过智能技术生成

关于SSL的一些介绍,在上篇文章中《关于SSL的初步理解》有介绍过。下面主要介绍SSL在IOS下的应用.

首先,由于SSL提供了一套数据加密通信的安全协议,其实现过程偏底层,且过程极其复杂。好在Github上为我们提供了一套开源的Socket框架CocoaAsyncSocket,基于TCP、UDP的功能封装也是相当的完整。

一.目录结构

实现方式也是基于GCD完成,CocoaAsyncSocket中主要包含两个类:

1.GCDAsyncSocket

用GCD搭建的基于TCP/IP协议的socket网络库
GCDAsyncSocket is a TCP/IP socket networking library built atop Grand Central Dispatch. -- 引自CocoaAsyncSocket.

2.GCDAsyncUdpSocket

用GCD搭建的基于UDP/IP协议的socket网络库.
GCDAsyncUdpSocket is a UDP/IP socket networking library built atop Grand Central Dispatch..-- 引自CocoaAsyncSocket.

 

二.客户端的创建

1.继承GCDAsyncSocketDelegate协议

2.声明属性

@property (nonatomic,strong)GCDAsyncSocket *clientSocket;//客户端socket

3.创建socket并制定代理对象为self

dispatch_queue_t delegateQueue = dispatch_queue_create("dispatch_queue_concrate", DISPATCH_QUEUE_CONCURRENT);
    //dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
self.clientSocket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:delegateQueue];

4.连接指定主机对应端口,连接的主机为IP地址,并非DNS名称.

NSError *error;
BOOL isConnect = [self.clientSocket connectToHost:@"127.0.0.1" onPort:5036 error:&error];
if (!isConnect) {
     NSLog(@"连接失败,:%@",error);
}else{
     NSLog(@"连接成功");
}

5.实现GCDAsyncSocketDelegate代理方法

1.连接成功代理回调

- (void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(uint16_t)port
{
    NSLog(@"socket连接成功:%@,port:%hu",host,port);
    
    [self addSecurtyTransport];
    
    //开始读取来自server端的数据
    [sock readDataWithTimeout:-1 tag:0];
}

2.开始手动签名验证回调,需要实现startTLS方法才会被执行。

-(void)socket:(GCDAsyncSocket *)sock didReceiveTrust:(SecTrustRef)trust completionHandler:(void (^)(BOOL))completionHandler
{
    NSLog(@"thread:%@",[NSThread currentThread]);
    /*
     * This is only called if st
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值