iOS 之网络安全HTTPS

HTTP 缺点

1. 通信使用明文(不加密),内容可能会被窃听

由于HTTP 本身不具备加密的功能,所以也无法做到对通信整体(使用HTTP 协议通信的请求和相应的内容)进行加密。窃听通信并非难事,只需要收集在互联网上流动的数据包(帧)就行了。对于收集来的数据包解析的工作,可以交给抓包工具(Charles)

2. 不验证通信方的身份就可能遭遇伪装

任何人都已发起请求,HTTP 协议通信时,不存在确认通信方的处理步骤。服务器只要接收到请求,不管对方是谁都会返回一个响应(但也仅限于发送端的IP 地址和端口号没有被Web 服务器设定限制访问的前提下)

3. 无法证明报文完整性,可能已遭篡改

完整性是指信息的准确度,若无法证明其完整性,通常也就意味着无法判断信息是否准确。

比如,从某个Web 网站上下载内容,是无法确定客户端下载的文件和服务器上存放的文件是否前后一致的。文件内容在传输途中可能已经被篡改为其他的内容。即使内容真的以改变,作为接收方的客户端也是觉察不到的,这个情况称为中间人攻击

HTTP+加密+认证+完整性保护=HTTPS

为了解决上述问题,需要在HTTP 上再加入加密处理和认证的机制。我们把添加了加密及认证机制的HTTP 称为HTTPS。

HTTPS 并非是应用层的一种新协议。只是HTTP 通信接口部分用SSL(Secure Socket Layer)和TLS(Transport Layer Security)协议代替而已。通常HTTP 直接和TCP 通信,当使用SSL 时,则变成先和SSL通信,再由SSL 和TCP通信了。所以HTTPS 实际是身披SSL 协议这层外壳的HTTP。

加密方式

1. 对称加密

加密和解密同用一个密钥的方式称为对称加密。所以客户端和服务端可以采用同一个密钥的方式对通信内容进行加密解密,但是有一个问题,这个密钥在传输时也可能被中间人获取,中间人可以将其换成自己的密钥,也就失去了加密的意义。怎么才能安全的转交这个密钥呢?

2. 非对称加密

非对称加密使用了两个密钥,一个称为公钥,可以随意对外公布,另一个称为私钥,自己保留,不能让其他人知道。私钥加密的内容只有公钥才能解开,反之公钥加密的内容只有私钥才能解开。

另外如果想要根据公钥和密文恢复信息原文是异常困难的,因为解密过程就是在对离散对数进行求值,这并非轻而易举就能办到的。

HTTPS 采用混合加密机制

为什么不单独使用非对称加密?因为非对称加密的方式要比对称加密的方式更为复杂,所以应充分利用两者的优势。用非对称加密的方式来安全传输对称加密的密钥,之后建立的通信交换报文阶段则使用对称加密的方式。

但是这里又有个问题,非对称加密的公钥要怎么安全传输?因为公钥传输的过程中,可能已经被攻击者替换掉了。

数字证书

为了解决这个问题,我们使用了由权威数字证书认证机构(CA,Certificate Autority)颁发的数字证书。该证书包含了持有者的信息、公钥以及证明该证书有效的数字签名。一般是由服务器发给客户端,接收方通过验证这个证书是不是由信赖的CA 签发,或者与本地的证书相对比,来判断证书是否可信;假如需要双向验证,则服务器和客户端都需要发送数字证书给对方验证。

怎么来验证数字证书是由CA签发的,而不是第三方伪造的呢?

在回答这个问题前,我们需要先了解CA 的组织结构。首先,CA组织结构中,最顶层的就是根CA,根CA 下可以授权给多个二级CA,而二级CA 又可以授权多个三级CA,所以CA 的组织结构是一个树结构。对于SSL证书市场来说,主要被Symantec(旗下有VeriSign和GeoTrust)、Comodo SSL、Go Daddy 和 GlobalSign 瓜分。
了解了CA的组织结构后,来看看数字证书的签发流程:

CA.png

数字证书的签发机构CA,在接收到申请者的资料后进行核对并确定信息的真实有效,然后就会制作一份符合X.509标准的文件。证书中的证书内容包含的持有者信息和公钥等都是由申请者提供的,而数字签名则是CA机构对证书内容进行hash加密后得到的,而这个数字签名就是我们验证证书是否是有可信CA签发的数据。

CerValiate.png

假设上图证书是由证书签发机构CA1签发的。

  1. 接收端接到一份数字证书Cer1后,对证书的内容做Hash得到H1;
  2. 从签发该证书的机构CA1的数字证书中找到公钥,对证书上数字签名进行解密,得到证书Cer1签名的Hash摘要H2;
  3. 对比H1和H2,如相等,则表示证书没有被篡改。
  4. 但这个时候还是不知道CA是否是合法的,我们看到上图中有CA机构的数字证书,这个证书是公开的,所有人都可以获取到。而这个证书中的数字签名是上一级生成的,所以可以这样一直递归验证下去,直到根CA。根CA是自验证的,即他的数字签名是由自己的私钥来生成的。合法的根CA会被浏览器和操作系统加入到权威信任CA列表中,这样就完成了最终的验证。所以,一定要保护好自己环境(浏览器/操作系统)中根CA信任列表,信任了根CA就表示信任所有根CA下所有子级CA所签发的证书,不要随便添加根CA证书。

一般操作系统和浏览器只包含根CA机构的证书,而在配置Web服务器的HTTPS时,也会将配置整个证书链,所以整个校验流程是从最后的叶子节点证书开始,用父节点校验子节点,一层层校验整个证书链的可信性。

HTTPS 验证流程

366784-20160127222221785-258650029.png
  1. 客户端发起一个HTTPS 的请求,把自身支持的SSL 的指定版本、加密算法发送给服务端

  2. 服务端接收到后与自身支持的对比,如果不支持则连接断开,反之则会从中选出一种加密算法和HASH算法以证书的形式返回给客户端,证书中还包含了公钥、颁证机构、网址、失效日期等等。

  3. 客户端收到服务端响应后会做以下几件事

    • 验证证书的合法性
      颁发证书的机构是否合法与是否过期,证书中包含的网站地址是否与正在访问的地址一致等,证书验证通过后,在浏览器的地址栏会加上一把小锁(每家浏览器验证通过后的提示不一样 不做讨论)

    • 生成随机密码
      如果证书验证通过,或者用户接受了不授信的证书,此时浏览器会生成一串随机数,然后用证书中的公钥加密。

    • Hash 握手信息
      用最开始约定好的Hash 方式,把握手消息取Hash 值,然后用随机数加密"握手消息+握手消息Hash值(签名)" 并一起发送给服务端

      在这里之所以要取握手消息的Hash 值,主要是把握手消息做一个签名,用于验证握手消息在传输过程中没有被篡改过。

  4. 服务端拿到客户端传来的密文,用自己的私钥来解密握手消息取出随机数密码,再用随机数密码 解密 握手消息与Hash 值,并与传过来的Hash 值做对比确认是否一致。然后用随机密码加密一段握手消息(握手消息+握手消息的HASH值 )给客户端

  5. 客户端用随机数解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手过程结束,之后所有的通信数据将由之前浏览器生成的随机密码并利用对称加密算法进行加密,因为这串密钥只有客户端和服务端知道,所以即使中间请求被拦截也是没法解密数据的,以此保证了通信的安全

非对称加密算法:RSA,DSA/DSS 在客户端与服务端相互验证的过程中用的是对称加密
对称加密算法:AES,RC4,3DES 客户端与服务端相互验证通过后,以随机数作为密钥时,就是对称加密
HASH算法:MD5,SHA1,SHA256 在确认握手消息没有被篡改时

总结HTTPS

HTTPS要使客户端与服务器端的通信过程得到安全保证,必须使用的对称加密算法,但是协商对称加密算法的过程,需要使用非对称加密算法来保证安全,然而直接使用非对称加密的过程本身也不安全,会有中间人篡改公钥的可能性,所以客户端与服务器不直接使用公钥,而是使用数字证书签发机构颁发的证书来保证非对称加密过程本身的安全。这样通过这些机制协商出一个对称加密算法,就此双方使用该算法进行加密解密。从而解决了客户端与服务器端之间的通信安全问题。

参考

https://www.cnblogs.com/zery/p/5164795.html
http://oncenote.com/2014/10/21/Security-1-HTTPS/

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

推荐阅读更多精彩内容