一文读懂系列-http/https

作者: monkey01 | 来源:发表于2018-02-27 15:25 被阅读123次

    http和https在日常工作中相信大家天天遇到,但是之间的区别估计大部分同学只知道https会对报文进行加密后传输,但是里面的细节是什么样的估计都不太能说的清楚,这个问题是我每次面试必问问题,面了很多人不管是前端的还是后端的同学基本都没能答得很好的,今天就详细介绍下http和https的区别,让大家以后不再只知道表面。
    http本身只是一个网络应用层的协议,首先客户端和服务器端之间通过网络多次握手后确认连通性后就可以建立TCP连接,进行通讯了。http没有加密机制,需要配合SSL(安全套接层)或TLS(安全传输层协议)来对通信进行加密。配合SSL使用得http则称为https。http和https在实际过程中最大差别在于网络握手的差异性,下面就重点说下握手的过程。

    http握手

    http是没有安全性处理的,所以只做了简单的3次网络连通性握手。

    Screenshot 2018-02-27 15.24.08

    1.客户端发送syn包

    客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;

    2.服务端发送SYN+ACK

    服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

    3.客户端发送ACK

    客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

    https握手

    https在http的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。具体是如何进行加密,解密,验证的,且看下图(图片来自网络)。


    Screenshot 2018-02-27 10.54.23
    1. 客户端发起https请求

    2. 服务端的配置

    采用https协议的服务器必须要有一套数字证书,可以是自己制作或者CA证书。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用CA证书则不会弹出提示页面。这套证书其实就是一对公钥和私钥。公钥给客户端加密使用,私钥给自己解密使用。

    1. 传送证书

    这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间等。

    1. 客户端解析证书

    这部分工作是有客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随即值,然后用证书对该随机值进行加密。

    1. 传送加密信息

    这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了,其实这就是一个对称密钥传递的过程,通过非对称加密来保证密钥安全传递。

    1. 服务端解密信息

    服务端用私钥解密后,得到了客户端传过来的随机值(私钥),然后把内容通过该值进行对称加密。所谓对称加密就是,将信息和私钥通过某种算法混合在一起,这样除非知道私钥,不然无法获取内容,而正好客户端和服务端都知道这个私钥,所以只要加密算法够彪悍,私钥够复杂,数据就够安全。

    1. 传输加密后的信息

    这部分信息是服务段用私钥加密后的信息,可以在客户端被还原。

    1. 客户端解密信息

    客户端用之前生成的私钥解密服务段传过来的信息,于是获取了解密后的内容。

    https对比http优缺点

    优点:

    • 证书认证,https客户端在握手的时候会获取到服务端给的公钥,客户端通过本地的TLS校验公钥证书的真伪;http没有证书校验的过程所以无法校验服务器的真伪,并且服务器也无法校验客户端是否合法,很容易被DDOS攻击。
    • 完整性校验,https会对报文做散列,通过散列来保证报文没有被篡改,而http无法判断报文有没有被篡改过。
    • 通讯加密,在整个https传输层加密的过程中,所有的报文头和报文体都是对称加密的,防止被截获。注意https加密是在传输层,https报文在被包装成tcp报文的时候完成加密的过程,无论是https的header域也好,body域也罢都是会被加密的。
    HTTPS一般使用的加密与HASH算法如下:
    
    非对称加密算法:RSA,DSA/DSS
    
    对称加密算法:AES,RC4,3DES
    
    HASH算法:MD5,SHA1,SHA256
    

    缺点:

    • 速度变慢,这里说的速度变慢其实也是相对的,毕竟做了证书校验,加解密的动作,所以肯定是会变慢的,这里可以通过SSL硬件加速器来提高https访问的速度。

    https的缺点相对于优点来说还是可以接受的,并且目前很多平台都全站使用https了,apple store出于用户安全考虑也不接受使用http接口的app上架了。

    总结

    https肯定是以后的主流通讯协议,能够理解https的握手过程基本就理解了https的原理,在开发和运维部署过程中也能够对证书能够比较好的理解了。https在日常使用过程中也会存在被中间人攻击的问题,被中间人攻击并不是因为https本身设计的问题,而是在使用过程中在客户端没有对服务器证书进行校验导致了中间人替换公钥证书进行报文拦截篡改,所以在https使用的过程中一定要注意证书校验,不能简单的信任所有证书,这里介绍的https握手过程是单向认证,https还有双向认证就是除了验证服务端证书外,还会校验客户端证书,我们常见的网银U盾就是典型的双向认证,双向认证的安全性非常高,但同时用户体验也是最差的,现在渐渐也被抛弃,除非是一些安全要求很高的场景。好了,https就聊这么多,大家应该能够理解了吧。

    相关文章

      网友评论

        本文标题:一文读懂系列-http/https

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