HTTPS概述及项目配置

阅读完本节你将了解到:

  • 什么是服务器信任证书?
  • 什么情况下证书是p12格式或者是cer格式的,都是属于公钥吗?
  • HTTPS认证是公钥还是秘钥?

公钥和私钥解读

客户端向服务器发送消息

  1. 客户端向服务器发送请求的时候,使用公钥对发送的内容进行加密,就可以达到保密的效果.
  2. 服务器在收到客户端发送过来内容时,使用私钥对内容解密得到明文数据

服务器向客户端返回消息

  1. 服务器将要发送的内容使用hash函数成摘要,再使用私钥加密摘要生成一个"数字签名",然后连同内容一起发给客户端
  2. 客户端使用公钥对数字签名进行解密生成摘要,然后对内容使用hash函数生成另一个摘要,比较两个摘要是否相同,来确认内容是否被篡改过

流程参考:[http://www.cnblogs.com/shijingjing07/p/5965792.html]

以上过程仅完成了服务器认证(客户端知道服务器是真的,服务器不知道客户端是不是真的).这种方式不需要在Bundle中引入CA文件,可以交给系统去判断服务器端的证书是不是SSL证书,验证过程也不需要我们去具体实现。

概念

数字证书则是由证书认证机构(CA)对证书申请者真实身份验证之后,用CA的根证书对申请人的一些基本信息以及申请人的公钥进行签名(相当于加盖发证书机 构的公章)后形成的一个数字文件。CA完成签发证书后,会将证书发布在CA的证书库(目录服务器)中,任何人都可以查询和下载,因此数字证书和公钥一样是公开的。实际上,数字证书就是经过CA认证过的公钥

TLS/SSL中使用了非对称加密,对称加密以及HASH算法

项目实践

在swift2.x项目中添加
项目中的网络框架使用的是Alamofire,只有一种认证服务器端的证书,后台给的是.crt格式的需要用钥匙串导出来.cer格式,然后将这个文件添加到项目中,之后开始写配置方法

    ///授权服务器认证
    func authServerTrust(){
        let manager = Alamofire.Manager.sharedInstance
        manager.delegate.sessionDidReceiveChallenge = { session, challenge in
        
            //认证服务器证书
            if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust {
//                print("服务器证书认证")
                let serverTrust:SecTrust = challenge.protectionSpace.serverTrust!
                let certificate = SecTrustGetCertificateAtIndex(serverTrust, 0)!
                let remoteCertificateData = CFBridgingRetain(SecCertificateCopyData(certificate))!
                let cerPath = NSBundle.mainBundle().pathForResource("xxxx.com", ofType: "cer")!
                let cerUrl = NSURL.init(fileURLWithPath: cerPath)
                let localCertificateData = NSData(contentsOfURL: cerUrl)
                
                if remoteCertificateData.isEqual(localCertificateData) == true {
                    let credential = NSURLCredential.init(trust: serverTrust)
                    challenge.sender?.useCredential(credential, forAuthenticationChallenge: challenge)
                    
                    
                    let serverTrust = NSURLCredential.init(trust: challenge.protectionSpace.serverTrust!)
                    return (.UseCredential,serverTrust)
                }else{
                    return (.CancelAuthenticationChallenge,nil)
                }
            }else{
                return (.CancelAuthenticationChallenge,nil)
            }
            
        }
    }

方法执行一次就行,不需要每次发起网络请求都调用此方法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,265评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,078评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,852评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,408评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,445评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,772评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,921评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,688评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,130评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,467评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,617评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,276评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,882评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,740评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,967评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,315评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,486评论 2 348

推荐阅读更多精彩内容