http与https

  • http和https的基本概念

    • http: 超文本传输协议,是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。
    • https: 是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
      https协议的主要作用是:建立一个信息安全通道,来确保数组的传输,确保网站的真实性。
  • http和https的区别

    http传输的数据都是未加密的,也就是明文的,网景公司设置了SSL协议来对http协议传输的数据进行加密处理,简单来说https协议是由http和ssl协议构建的可进行加密传输和身份认证的网络协议,比http协议的安全性更高。

    • Https协议需要ca证书,费用较高。
    • http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
    • 使用不同的链接方式,端口也不同,一般而言,http协议的端口为80,https的端口为443
    • http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
  • SSL协议的握手过程

    1. 客户端先给服务端发送一个消息,消息内容包括:客户端支持的加密方式,支持的压缩方法,SSL的版本号,客户端生成的随机数,文本内容“Hello”等;
    2. 服务端接收到消息后,也回发一个Hello,并携带从客户端支持的加密方式中选择的加密方式,服务端生成的随机数,服务端的SSL版本号等信息;
    3. 随后服务器给客户端发送一个Certificate报文,报文中包含服务端的公钥证书;
    4. 紧接着服务器给客户端发送Server Hello Done, 表示最初的协商握手过程结束;
    5. 客户端接收到服务端发送的握手结束的消息后,以Client Key Exchange作为回应,此报文中包含通信加密过程中使用的一种被称为Pre-master secret的随机密码串,并使用第三步接收到的公钥证书进行了加密;
    6. 接着客户端发送Change Cipher Spec报文,该报文告知服务端,此步骤之后的所有数据将使用第五步中生成的master secret进行加密(master secret的生成过程看后面的介绍);
    7. 随后客户端发送Finish报文,此报文中包含连接至今所有报文的整体校验值,用于完整性验证;
    8. 服务端接收到客户端发送的Change Cliper Spec报文后,同样以Change Cliper Spec报文作为回应;
    9. 接着服务端发送Finish报文给客户端,表示服务端已正确解析客户端发送的整体校验值,至此,SSL握手的过程结束。
    10. 随后开始使用HTTP协议传输使用master secret加密过的数据。
  • 说明

    前两步是协商加密算法以及传输各自生成的随机数(为后续生成master secret做准备)的过程;

    第三步服务端将自己的证书发送给客户端,这个证书中包含一个数字签名(CA签名)和服务端CA证书的公钥,客户端对证书中包含的服务端信息进行Hash, 同时使用接收到的公钥对数字证书解密,获取其中的Hash值,与前面计算得到的Hash值进行比较,即可验证证书的有效性(完整性&真实性);

    服务端收到客户端发送的Change Cipher Spec(第五步),会使用自己的私钥进行解密,获取报文中的Pre-master secret,这时通信双方都拥有对方的Random(前两步生成的),Pre-master secret,以及自身的Random, 将三个数作为种子通过算法生成master secret, 用来加密后续Http请求过程中的数据。其中master secret的生成规则为:

    MD5(pre_master_secret + SHA('A' + pre_master_secret +
    ClientHello.random + ServerHello.random)) +
    MD5(pre_master_secret + SHA('BB' + pre_master_secret +
    ClientHello.random + ServerHello.random)) +
    MD5(pre_master_secret + SHA('CCC' + pre_master_secret +
    ClientHello.random + ServerHello.random));
    
  • 为什么需要这么复杂
    两个方面的考量:安全,效率。如果直接使用对称加密的方式进行加密,如果密钥不被泄漏当然也是安全,但问题是:密钥如何传递给另一端呢,在数据传输过程中,如果通信被窃听,则密钥被窃取,那此时加密就没有任何意义了。那可不可以使用非对称加密的方式呢?理论上是可以的,数据传输之前,服务端只需要将自己的公钥传输给客户端,客户端在传输数据时,使用接收的公钥进行加密,服务端接收到数据后使用私钥进行解密即可。但这里有个不容忽视的问题:效率。非对称加密需要大量计算,肯定会占用很多硬件资源,所以效率太低。所以为了解决安全和效率问题,SSL使用了对称加密(加密和解密使用同样的密钥)和非对称加密(公钥加密,私钥解密)组合的方式:使用非对称加密的方式传输对称加密中生成密钥的种子(pre master secret)【对应上面的第五步】,然后使用对称加密的方式对通信数据进行加密【对应上面的第十步】,既保障了密钥的安全性,也提高了加密速度。

  • https协议的优点

    1. 使用HTTPS协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;
    2. HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性。
    3. HTTPS是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。
    4. 谷歌曾在2014年8月份调整搜索引擎算法,并称“比起同等HTTP网站,采用HTTPS加密的网站在搜索结果中的排名将会更高”。
  • https协议的缺点
    https握手阶段比较费时,会使页面加载时间延长50%,增加10%~20%的耗电。

    https缓存不如http高效,会增加数据开销。

    SSL证书也需要钱,功能越强大的证书费用越高。

    SSL证书需要绑定IP,不能再同一个ip上绑定多个域名,ipv4资源支持不了这种消耗。

  • 参考:https://juejin.im/post/5aeee624f265da0b8e7f4cdb

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值