计划采用铁六角(6W)的形式来实现知识树,即what、why、how、when、where、who,另外再加想到的扩展(树根扩展,同枝扩展,枝叶扩展)。构造出来的知识树一开始是不完美的,我在以后会不断的修改吗,争取包含更全面,更系统的知识点,但我不会对知识点进行过多的解释。力求心平气和、戒骄戒躁! 本文参考深入理解HTTPS工作原理 HTTPS流程,是如何加密的?
what:什么是http、https? why:https作用?----http缺点(get/post请求方式)。
从传输的角度来说,他们都是不安全的,因为 HTTP 在网络上是明文传输的,只要在网络节点上捉包,就能完整地获取数据报文。
how: SSL/TLS加密过程
HTTPS 协议的主要功能基本都依赖于 TLS/SSL 协议,TLS/SSL 的功能实现主要依赖于三类基本算法:散列函数、对称加密和非对称加密,其利用非对称加密实现身份认证和密钥协商,对称加密算法采用协商的密钥对数据加密,基于散列函数验证信息的完整性。
1.解决内容可能被窃听的问题——加密 (1)对称加密:这种方式加密和解密同用一个密钥。加密和解密都会用到密钥。没有密钥就无法对密码解密,反过来说,任何人只要持有密钥就能解密了。 (2)非对称加密:公开密钥加密使用一对非对称的密钥。一把叫做私有密钥,另一把叫做公开密钥。顾名思义,私有密钥不能让其他任何人知道,而公开密钥则可以随意发布,任何人都可以获得。 (3)对称加密+非对称加密(HTTPS采用这种方式)
2.解决报文可能遭篡改问题——数字签名 3.解决通信方身份可能被伪装的问题——数字证书 HTTPS工作流程 1.Client发起一个HTTPS(比如https://juejin.im/user/5a9a9cdcf265da238b7d771c)的请求,根据RFC2818的规定,Client知道需要连接Server的443(默认)端口。
2.Server把事先配置好的公钥证书(public key certificate)返回给客户端。
3.Client验证公钥证书:比如是否在有效期内,证书的用途是不是匹配Client请求的站点,是不是在CRL吊销列表里面,它的上一级证书是否有效,这是一个递归的过程,直到验证到根证书(操作系统内置的Root证书或者Client内置的Root证书)。如果验证通过则继续,不通过则显示警告信息。
4.Client使用伪随机数生成器生成加密所使用的对称密钥,然后用证书的公钥加密这个对称密钥,发给Server。
5.Server使用自己的私钥(private key)解密这个消息,得到对称密钥。至此,Client和Server双方都持有了相同的对称密钥。
6.Server使用对称密钥加密“明文内容A”,发送给Client。
7.Client使用对称密钥解密响应的密文,得到“明文内容A”。
8.Client再次发起HTTPS的请求,使用对称密钥加密请求的“明文内容B”,然后Server使用对称密钥解密密文,得到“明文内容B”。
树根扩展:OSI七层结构 同枝扩展:http与https区别
关于安全性,用最简单的比喻形容两者的关系就是卡车运货,HTTP下的运货车是敞篷的,货物都是暴露的。而https则是封闭集装箱车,安全性自然提升不少。
HTTPS比HTTP更加安全,对搜索引擎更友好,利于SEO,谷歌、百度优先索引HTTPS网页; HTTPS需要用到SSL证书,而HTTP不用; HTTPS标准端口443,HTTP标准端口80; HTTPS基于传输层,HTTP基于应用层;(这个存在异议) HTTPS在浏览器显示绿色安全锁,HTTP没有显示;
枝叶扩展:https缺点:为何所有的网站不都用https? 首先,很多人还是会觉得HTTPS实施有门槛,这个门槛在于需要权威CA颁发的SSL证书。从证书的选择、购买到部署,传统的模式下都会比较耗时耗力。 其次,HTTPS普遍认为性能消耗要大于HTTP,因为与纯文本通信相比,加密通信会消耗更多的CPU及内存资源。(其实优化后,速度并不慢)。