1.饭前小菜:http和https知识点
HTTP(全称:HyperText Transfer Protocol)超文本传输协议,基于TCP实现的应用层协议。运行在TCP之上,所有传输的内容都是明文的,客户端和服务器端都无法验证对方的身份。
HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。
HTTPS是一种基于SSL/TLS的HTTPS协议,所有的HTTPS数据都是在SSL/TLS协议封装之上传输的。其在HTTPS协议的基础上,添加了SSL/TLS握手以及数据加密传输。
使用HTTP协议时,HTTP直接和TCP通信。当使用SSL时,则演变成先和SSL通信,再由SSL跟TCL通信,用 SSL 建立安全通信线路之后,就可以在这条线路上进行 HTTP 通信了。
SSL/TLS中使用了非对称加密,对称加密以及HASH算法。其中非对称加密算法用于在握手过程中加密生成的秘钥,对称加密算法用于对真正传输的数据进行加密,而HASH算法用于验证数据的一致性、完整性。
(1)对称加密:对称加密是指加密和解密使用的密钥是同一个密钥,或者可以相互推算,双向可逆加解密的。
对称加密的优点是算法简单,加解密效率高,系统开销小,适合对大数据量加密。
缺点是解密加密使用同一个密钥,需要考虑远程通信的情况下如何安全的交换密钥,如果密钥丢失,所谓的加密解密就失效了。
(2)非对称加密:非对称加密和解密使用的密钥不是同一密钥,其中一个对外界公开,被称为公钥,另一个只有所有者知道,称作私钥。用公钥加密的信息必须用私钥才能解开,反之,用私钥加密的信息只有用公钥才能解开,为不可逆加解密。
(3)基于HASH散列函数验证信息的完整性,验证消息摘要的一致性。
2.硬菜上桌:详解HTTPS传输过程
小艾:客户端。小斯:服务端。
小艾小斯分隔两地,平时都用书信来交流联系,相谈甚欢。
有一天,他两谈论到银行卡密码等机密文件时,小艾突然意识到:我们这么明目张胆的把银行卡密码写在书信上,岂不是很容易被信差看到了?(HTTP通信、中间人劫持)
小斯眉头一皱而后嘴角微微上扬:有道理有道理。这样,你定一个只属于你和我知道的秘钥A,告诉我,然后我们书信上的消息都用这个秘钥A进行加密解密,就算信差看到了,没有这个秘钥A解密,他也看不懂书信上加密后的书文。(对称加密)
小艾表示还有个问题:那我要先把秘钥A通过书信告诉你,如果信差半路把我的秘钥A偷换成他的秘钥AB,而你误以为收到的秘钥AB就是我的秘钥A,使用秘钥AB加密书信,信差再用他的秘钥AB将你的书信解密并用我的秘钥A加密其他的消息后再发给我,致使我们接下来的通信都被信差在中间经手摆了一道,我们收到的消息都不是我们最初书写的信息。
双手摩擦的小斯想了会,双手一拍:有了,给通信的书信加个保险柜;我们各自定义一对密码(公钥C和私钥D),用公钥C加密的信息必须用私钥D才能解开,反之,用私钥D加密的信息只有用公钥C才能解开。私钥自己留着,公钥告诉对方。这样的话,就算信差知道了公钥C也没用,只有我们自己保留的私钥D才能打开保险柜。(非对称加密)
小斯:但是会有个问题。。。
小艾:但是,每次通信打开保险柜都要费上半天的,狠麻烦狠耗时啊。
小斯:聪明聪明,这也是我正要说的。为了解决你说的麻烦耗时问题,你可以把你的秘钥A,使用我的公钥C将其加密发过来,然后我用我的私钥D解密知道你的秘钥A后,接下来我们通信就都用秘钥A来加解密通信,这样只需使用一次保险柜就行了,接下来通信也能比较快的。(非对称加密+对称加密)
小艾:还是你机智啊,这样的套路都能被你想到,猴赛雷猴赛雷。
小斯:想想,你觉得这样还有没什么破绽没?
小艾若有所思:没啊!我觉得这样的解决方案狠ok了啊。
哈哈一笑的小斯解释道:再想一想的。假如呢,这个保险柜直接被信差换成他自己的保险柜呢,也就是截取了我发给你的公钥D换成他自己的公钥E,你用他的公钥E加密你的秘钥A,他就能中途截取用他自己的私钥F解开保险柜拿到你的秘钥A,偷换个秘钥G后再用我的公钥D加密发回给我,那我们接下来的通信其实用的都是他的秘钥G,而不是你的秘钥A了。(中间人劫持、攻击)
愤愤不平的小艾苦恼道:真是道高一尺魔高一丈啊,难道就没有办法让我们安安稳稳舒舒心心的通信了吗?
小斯双手抱怀:当然有啦。只要我们找个公认的邮局机构,每次正式通信前,带着邮局机构颁发的令牌(数字证书)去找邮局机构,再进行下风险的评估和资质的认证,邮寄机构认证了保险柜的安全性和正确性之后,我们就可以继续用刚提到的方案进行通信了。(数字证书+非对称加密+对称加密)
3.厨师解答食谱:CA证书和HTTPS通信原理
经过TCP的三次握手建立连接后,还要经过HTTPS 的四次握手:
1.客户端: 你好,我要发起一个 HTTPS 请求,请给我你的公钥
2.服务器: 好的,这是我的证书,里面还有加密后我的公钥
3.客户端: 解密成功以后告诉服务器: 这是我的 (用公钥加密后的) 对称秘钥。
4.服务器: 好的,我知道你的秘钥了,后续就用它来加密解密消息传输。
第2步操作:此处的证书,就是数字证书(原始信息Z+数字签名Y);服务端收到客户端的请求后,会将例如ip、域名等原始信息Z进行HASH算法生成一个消息摘要X,然后让有公信力的认证中心(简称CA)用其私钥对消息摘要X进行加密,生成个数字签名Y,最后将原始信息Z和Y合成数字证书发送给客户端。
第3步操作:客户端在收到数字证书后,将数字签名Y到认证中心(CA)用其公钥解开,得到消息摘要X;然后再根据约定的HASH算法将原始信息Z进行HASH计算得到消息摘要O,最后将X和O进行对比,如果一样,就说明是真正的服务器发送的消息;不相等就说明消息被劫持过,拒绝结束此次的请求。证明是真身之后,就用服务端给的公钥对自己生产的对称秘钥加密,发送给服务端。
4.结账散场
欢迎大家关注交流: