这篇文章首发于个人我的网站:据说 - https://tasaid.com/,建议在个人我的网站阅读,拥有更好的阅读体验。html
这篇文章与 博客园 和 Segmentfault 共享。前端
前端开发QQ群:377786580git
HTTPS是互联网 web 大势所趋。各大网站都已陆续部署了HTTPS,这篇文章咱们来探讨什么是HTTPS以及为何要部署HTTPS。web
这篇文章收录在《Said - 从HTTP到HTTPS》系列:算法
当你在浏览器输入一个网址 (例如 http://tasaid.com)的时候,浏览器发起一个 HTTP 请求,带着请求信息 (参见 HTTP Headers),链接到服务器,把请求信息递给服务器,服务器收到信息以后,解析相关的信息,而后进行处理,再返回浏览器请求的数据。浏览器
简单来讲是这么一个流程:安全
看图说话:服务器
这其中有个问题,浏览器爸爸和服务器都没有验证清单信息的有效性和对方的身份。万一有人在中间把线程小哥拦下来,暴揍一顿,而后把物品清单给换了怎么办?或者有人把线程小哥在半路上暴揍一顿,拿了清单换了另一个小哥怎么办?并发
这是个很严肃的问题:假如服务器要把一些东西锁在柜子里,须要小明给密码才能够打开柜子。而后小明把密码写在清单上让浏览器爸爸交给服务器。这时候,若是这张清单被人拦截下来,不就获得了小明的密码?性能
简单来讲,传输的信息中包含用户密码,被拦截了怎么办?
正由于HTTP请求有这些安全性的问题,因此HTTPS诞生了,致力于解决了这些安全性问题,咱们进行一下对比:
安全性 | HTTP | HTTPS |
---|---|---|
窃听风险 | 传递的信息是明文的,可能会被有心人拦截下来窃听 | 信息加密传播 |
篡改风险 | 传递的信息可能会被篡改 | 信息校验,一旦被篡改马上就会被发现 |
假装风险 | 没有验证通讯另一头对方的身份,可能遭遇假装 | 身份校验 |
那么HTTPS是如何作到更安全的呢?
简单来讲,HTTPS 便是在 HTTP 下加入了一层 SSL 加密,因此被称为HTTPS。具体的加密过程则是 公匙加密法:
公匙密码和算法都是公开的,而私匙则是保密的。加密使用的公匙和解码使用的密匙都是不相同的,所以这是一个 非对称加密 算法。
说起 HTTPS ,就会听到你们说须要证书才能部署,那么什么是证书呢?
由于互联网不安全,公匙也是信息的一部分,也是会有被篡改的风险的。因此引入了互联网权威机构 - CA 机构,又称为证书受权 (Certificate Authority) 机构,浏览器会内置这些"受信任的根证书颁发机构" (即 CA)。
服务端向权威的身份鉴定 CA 机构申请数字证书,CA 机构验证了网站以后,会把网站录入到内部列表,采用 Hash 把服务端的一些相关信息生成摘要,而后 CA 机构用本身的私匙,把服务端的公匙和相关信息一块儿加密,而后给申请证书的服务端颁发数字证书,用于其余客户端 (好比浏览器) 认证这个网站的公匙。
客户端经过服务端下发的证书,找到对应的 CA,而后向 CA 验证这个证书是否有效,CA 验证经过以后,下发服务端的公匙。
由于 CA 是权威而且可信的,因此客户端 (浏览器) 信任 CA,而 CA 又信任通过认证的服务端 ,因此客户端 (浏览器) 也信任这个服务端,这就是信任链 (Chain Of Trust)。
而 CA 颁发的数字证书,通常包含这些信息:
简单来讲:为了保证公匙是安全的,因此经过数字证书验证公匙。
一条完整的HTTPS请求应该是这样的:
见下图:
这篇文章首发于个人我的网站:据说 - https://tasaid.com/,建议在个人我的网站阅读,拥有更好的阅读体验。
这篇文章与 博客园 和 Segmentfault 共享。
前端开发QQ群:377786580