美文网首页
HTTP之四:HTTPS

HTTP之四:HTTPS

作者: longLiveData | 来源:发表于2020-05-25 10:19 被阅读0次

    本文仅供笔者平日学习笔记之用,侵删
    原文:https://mp.weixin.qq.com/s/wZONAYSlkufds0LMzoE-9g

    好人占多数,坏人也不少。总有些要搞坏事,因为HTTP是明文,所以需要想办法保护明文,从而出现了https。

    1、安全四要素

    机密性

    对信息进行保密,只能可信的人可以访问(让我想起时间管理者)。

    完整性

    数据在传输过程中内容不被"篡改"。虽然机密性对数据进行保密了,但是有上策也有下策(Hack)

    身份认证

    证明自己的身份是本人,保证其消息发给可信的人

    不可否认

    君子一言驷马难追,说话算数,说过的话做过的事要有所保证

    2、HTTPS

    HTTP和HTTPS从上图我们知道HTTPS无非是在传输层和应用层中间加了一层TLS,正是TLS紧跟当代密码学的步伐,尽全力的保障用户的安全。老规矩,我们用wireshark看看长什么样子。

    可以看出在交互的过程中多了不少新东西,了解TLS,TLS由SSL握手协议,SSL修改密码规范协议,SSL警报协议,SSL记录协议组成。

    SSL握手协议:

    相对于三次握手

    记录协议:

    记录为TLS发送接收数据的基本单位。它的自协议需要通过记录协议发出。如果多个纪录数据则可以一个TCP包一次性发出。

    警报协议:

    类似HTTP状态码,通过反馈不同的消息进行不同的策略。

    变更密码规范协议:

    告诉对方,从此刻开始,后续的数据将使用加密算法进行加密再传输。

    3、对称加密与非对称加密

    对称加密对称加密,顾名思义,加密方与解密方使用同一钥匙(秘钥)。具体一些就是,发送方通过使用相应的加密算法和秘钥,对将要发送的信息进行加密;对于接收方而言,使用解密算法和相同的秘钥解锁信息,从而有能力阅读信息。

    非对称加密

    在对称加密中,发送方与接收方使用相同的秘钥。那么在非对称加密中则是发送方与接收方使用的不同的秘钥。其主要解决的问题是防止在秘钥协商的过程中发生泄漏。比如在对称加密中,小蓝将需要发送的消息加密,然后告诉你密码是123balala,ok,对于其他人而言,很容易就能劫持到密码是123balala。那么在非对称的情况下,小蓝告诉所有人密码是123balala,对于中间人而言,拿到也没用,因为没有私钥。所以,非对称密钥其实主要解决了密钥分发的难题。如下图:

    其实我们经常都在使用非对称加密,比如使用多台服务器搭建大数据平台Hadoop,为了方便多台机器设置免密登录,是不是就会涉及到秘钥分发。再比如搭建Docker集群也会使用相关非对称加密算法。

    4、混合加密

    非对称加密算法,大多数是从数学问题演变而来,运算速度较慢。混合加密所谓取长补短。通信过程中使用RSA等解决密钥交换问题,然后使用随机数产生的在对称算法中的会话密钥,最后使用加密。对方使用私钥解密得到的密文取出会话秘钥,这样就实现了密钥交换。

    混合加密通过混淆加密等方式完成了机密性任务,作为Hack只需要伪造发布公钥或者作为之间人窃听密文。但是我们知道安全是四要素,还需要保证数据的完整性,身份认证等。

    5、摘要

    摘要算法可以理解为一种特殊的"单向"加密算法,无密钥,不可逆。在平时项目中,应该大家都是用过MD5,SHA-1。但是在TLS中使用SHA-2。

    假设小A转账5000给小C,小A加上SHA-2摘要。网站计算摘要并对比,如果一致则完整可信。

    此时小B想修改小A给的Money,这个时候网站计算摘要就会发现不一样,不可信!

    6、HTTPS请求建立连接过程

    注意:

    • 首先通过非对称加密建立通信过程
    • 在握手阶段,为什么使用3个随机数,一方面防止「随机数 C」被猜出,另一方增加Session Key随机性
    • Client发出支持的「对称/非对称加密」算法
    • Server返回选用的「对称/非对称加密」算法
    • Client对算法进行确认
    • Server对算法进行确认

    根据Wireshak结果,对TLS进一步剖析。TCP三次握手建立连接,作为礼貌,Client先打招呼"Client Hello"。里面包含了Client的版本号、所支持的密码套件和随机数,如下图所示:

    Server端表示尊重,回复"ServerHello",同时进行版本校对,给出随机数(Server Random),从Client算法列表中选择一个密码套件,在这里选择的"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"。

    这里的"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"什么意思呢?

    密码套件选择椭圆曲线加RSA、AES、SHA256。

    双方通过证书验证身份。因为本机服务器选用了ECDHE算法,为了实现密钥交换算法,它会发送证书后把椭圆曲线的公钥(ServerParams)连带"Server Key Exchange"消息发送出去

    意思是,刚才混合加密套件比较复杂,给你个算法参数,好好记住,别弄丢了。

    随后服务端回复"hello done"告知打招呼完毕。

    打完招呼完毕后,客户端对证书进行核实。然后根据密码套件也生成椭圆曲线的公钥,用"Client Key Exchange"消息发给服务器:

    此时客户端和服务端都有了密钥交换的两个参数(Client Params、ServerParams),然后通过ECDHE算法算出了一个新的值,叫“Pre-Master”。

    有了主密钥会话密钥,客户端发送“Change Cipher Spec”和“Finished”消息,最后将所有消息加上摘要发送给服务器验证。

    服务器同样发送“Change Cipher Spec”和“Finished”消息,握手结束,开始进行HTTP请求与响应。

    7、初探域名****我们知道域名的出现让我们更容易记忆,按照"."分割,越靠近右边级别越高。域名本质是一个名字空间系统,采用多级域名的方式区分不同的国家,公司等,作为一种身份的标识。

    根域名服务器(Root DNS Server):管理顶级域名服务器,返回“com”“net”“cn”等顶级域名服务器的 IP 地址;

    顶级域名服务器(Top-level DNS Server):管理各自域名下的权威域名服务器,比如:
    com 顶级域名服务器可以返回 apple.com 域名服务器的 IP 地址;

    权威域名服务器(Authoritative DNS Server):管理自己域名下主机的 IP 地址,比如apple.com 权威域名服务器可以返回 www.apple.com 的 IP 地址**。

    相关文章

      网友评论

          本文标题:HTTP之四:HTTPS

          本文链接:https://www.haomeiwen.com/subject/vbueahtx.html