核心

1. 怎么创建  NSMutableDictionary *sslSetting

2.怎么验证服务端公钥

准备:

本人目前使用的 iOS 公私钥是 p12, 服务端公钥建议准备.der 文件。本人实验了多种方式,觉得下面粘的代码的那种方式最靠谱。

SecIdentityRef identityout; // You can get SecIdentityRef object from *.p12 keystore file. SSL Socket Server will authentication client base on this certificate. At server side, we will add client's certificate to trust manager.[sslSettings setObject:@0 forKey:GCDAsyncSocketSSLProtocolVersionMax];[sslSettings setObject:@YES forKey:GCDAsyncSocketManuallyEvaluateTrust]; // This will call a delegate method socket:(GCDAsyncSocket *)sock didReceiveTrust: ...[sslSettings setObject:[[NSArray alloc] initWithObjects:(__bridge id)(identityout), nil] forKey:GCDAsyncSocketSSLCertificates];        [self.asyncSocket startTLS:sslSettings];

特别需要注意这个 GCDAsyncSocketSSLProtocolVersionMax 这个key,根据实际项目,去develop.apple.com 查找适应你自己的SSL 加密方式。
2. 在- (void)socket:(GCDAsyncSocket *)sock didReceiveTrust:(SecTrustRef)trust                                    completionHandler:(void (^)(BOOL shouldTrustPeer))completionHandler;这个方法中

+ (BOOL)isEqualTrust:(SecTrustRef)trust{    NSBundle *bundle = [self getTradeBundle];    NSString *rootCertPath = [bundle pathForResource:@"XXXX" ofType:@"der"];    NSData *rootCertData = [NSData dataWithContentsOfFile:rootCertPath];

    OSStatus status = -1;    SecTrustResultType result = kSecTrustResultDeny;

    if(rootCertData) {        // 创建信任证书        CFDataRef certData = CFBridgingRetain(rootCertData);        SecCertificateRef cert1;        cert1 = SecCertificateCreateWithData(NULL, certData);

        // 设置信任证书        SecTrustSetAnchorCertificates(trust, (__bridge CFArrayRef)[NSArray arrayWithObject:(__bridge id)cert1]);

        status = SecTrustEvaluate(trust, &result);    } else {        NSLog(@"local certificates could not be loaded");        return NO;    }

    if (status == noErr && (result == kSecTrustResultProceed || result == kSecTrustResultUnspecified)) {        //成功通过验证,证书可信        NSLog(@"local certificates is trust");        return YES;    } else {        CFArrayRef arrayRefTrust = SecTrustCopyProperties(trust);        NSLog(@"error in connection occured\n%@", arrayRefTrust);        return NO;    }}

GCDAsyncSocket two way authentication SSL 双向认证相关推荐

  1. php使用curl库进行ssl双向认证

    官方文档: http://www.php.net/manual/zh/function.curl-setopt.php#10692 官方举例: <?php curl_setopt($ch, CU ...

  2. 服务器双向认证 原理,什么叫SSL双向认证 SSL双向认证过程是怎样的

    我们都知道SSL认证能够分成SSL双向认证和SSL单向认证.那么,什么是SSL双向认证?SSL双向认证过程又是怎样的?小编就在接下来的内容为各位详细讲述. 什么叫SSL双向认证 SSL双向认证则是需要 ...

  3. SSL双向认证和SSL单向认证的区别

    双向认证 SSL 协议要求服务器和用户双方都有证书.单向认证 SSL 协议不需要客户拥有CA证书,具体的过程相对于上面的步骤,只需将服务器端验证客户证书的过程去掉,以及在协商对称密码方案,对称通话密钥 ...

  4. HTTPS|SSL笔记-SSL双向认证成功握手过程(含wireshark分析)

    这里只研究连接过程. 整体的流程是这样的 前三个那个SYN.SYN ACK.ACK是TCP三次握手,就不说了. 1. 握手成功后,客户端发送自己支持的加密套,和随机数给服务端,也就是Client He ...

  5. java使用bks双向认证_客户端与服务器SSL双向认证(客户端:Android

    客户端与服务器SSL双向认证(客户端Android-服务端vc)-含源码(一)服务端已经生成了client.p12.server.p12.ca.p12:主要实现客户端过程(二)目录结构(三)客户端注 ...

  6. SSL双向认证和单向认证原理

    一.公钥私钥 1,公钥和私钥成对出现 2,公开的密钥叫公钥,只有自己知道的叫私钥 3,用公钥加密的数据只有对应的私钥可以解密 4,用私钥加密的数据只有对应的公钥可以解密 5,如果可以用公钥解密,则必然 ...

  7. SSL双向认证和SSL单向认证的流程和区别

    refs: SSL双向认证和SSL单向认证的区别 https://www.jianshu.com/p/fb5fe0165ef2 图解 https 单向认证和双向认证! https://cloud.te ...

  8. 什么是SSL双向认证,与单向认证证书有什么区别?

    SSL/TLS 证书是用于用户浏览器和网站服务器之间的数据传输加密,实现互联网传输安全保护,大多数情况下指的是服务器证书.服务器证书是用于向浏览器客户端验证服务器,这种是属于单向认证的SSL证书.但是 ...

  9. Android 10 SSL双向认证握手失败

    Android 10 SSL双向认证握手失败 公司项目前端时间遇到的一个问题(已经解决了),最近有时间准备分享一下. 项目工程中一直使用SSL双向认证的套接字通信方式,前段时间有Android 10的 ...

最新文章

  1. 深度学习调参有哪些技巧?
  2. 「自己开发直播」rtmp-nginx-module实现直播状态、观看人数控制
  3. 暴汗,今天遇到个奇事
  4. Tarjan 复习小结
  5. vue.js 三种方式安装--npm安装
  6. .NET技术之美-网络编程
  7. Koa(1)之——koa入门
  8. 如何在Java 8中使用filter()方法
  9. WifiManager的getScanResults()返回列表为0
  10. phpstudy mysql 1067_MySQL_MySQL的1067错误解决,1 安装MYSQL后更改了ROOT的密码 - phpStudy...
  11. java并发编程第七课 集合类并发处理
  12. InstallShield Slient Uninstall
  13. css实现图片旋转360°
  14. vue---向后台校验用户名/手机号码/邮箱等唯一性的参数是否被注册
  15. 12 WebGL移动、旋转和缩放中的平移
  16. 微信公众号已认证怎么改名字,公众号昵称可以改吗?
  17. 像写Flutter一样开发Android原生应用
  18. 2023年英文科技论文写作与学术报告-期末考试
  19. ultraiso制作u盘启动盘方法
  20. 基于CNN的海面舰船图像二分类

热门文章

  1. java游戏开发毕业论文_基于JAVA的五子游戏的开发设计毕业论文
  2. 京东云,对话生成AI冠军!
  3. HTTP请求流程(超级详细)
  4. python开发环境对比_【整理】各种Python的IDE(集成开发环境)的总结和对比 | 在路上...
  5. TX2+Docker
  6. 自考java填空题_java 自考题目
  7. GDI+_绘制QQ头像
  8. .java文件出现小闹钟
  9. h5 手机屏幕适配—REM
  10. 2021年中国网络安全产业分析报告》发布