HTTPS流程 & 实现原理

前述

HTTP请求都是明文传输的,所谓的明文指的是没有经过加密的信息,如果HTTP请求被黑客拦截,并且里面含有银行卡密码等敏感数据的话,会非常危险。
HTTP消息体被劫持,传输过程将面临:
(1) 窃听风险(eavesdropping):第三方可以获知通信内容。
在这里插入图片描述(2) 篡改风险(tampering):第三方可以修改通信内容。
在这里插入图片描述
(3) 冒充风险(pretending):第三方可以冒充他人身份参与通信。
在这里插入图片描述

HTTPS可以将数据加密传输,也就是传输的是密文,即便黑客在传输过程中拦截到数据也无法破译,这就保证了网络通信的安全。
安全的通信需要包括以下四个原则: 机密性、完整性,身份认证和不可否认。

  • 机密性:即对数据加密,解决了窃听风险,因为即使被中间人窃听,由于数据是加密的,他也拿不到明文;
  • 完整性:指数据在传输过程中没有被篡改,不多不少,保持原样,中途如果哪怕改了一个标点符号,接收方也能识别出来,从来判定接收报文不合法;
  • 身份认证:确认对方的真实身份,即证明“你妈是你妈”的问题,这样就解决了冒充风险,用户不用担心访问的是某宝结果却在和钓鱼网站通信的问题;
  • 不可否认: 即不可否认已发生的行为,比如小明向小红借了 1000 元,但没打借条,或者打了借条但没有签名,就会造成小红的资金损失。

原理

HTTPS的整体过程分为证书验证和数据传输阶段
在这里插入图片描述
① 证书验证阶段
浏览器发起 HTTPS 请求
服务端返回 HTTPS 证书
客户端验证证书是否合法,如果不合法则提示告警

② 数据传输阶段
1.当证书验证合法后,在本地生成随机数
2.通过公钥加密随机数,并把加密后的随机数传输到服务端
3.服务端通过私钥对随机数进行解密
4.服务端通过客户端传入的随机数构造对称加密算法,对返回结果内容进行加密后传输

HTTPS请求过程:

  1. 客户端发送明文请求,发送加密规则、随机数(Random_C)到服务器。
  2. 服务器发送加密规则、CA证书、一个随机数到客户端。加密规则是服务器根据客户端发来的请求中选出的一组加密算法和HASH算法,并通过选出的加密算法和HASH算法生成随机数(Random_S)。CA证书是服务器的身份信息,包括服务器地址、加密公钥、证书颁发机构等信息。
  3. 客户端拿到第二步的信息后会进行证书校验、生成密码、计算协商密钥、生成握手信息。证书校验:校验证书的合法性,包括颁发证书的机构是否合法,证书中的网址跟访问的网址是否一致等。生成密码:客户端会生成一串随机数密码(Pre_master),然后使用CA证书里的公钥进行加密(enc_pre_master)。计算协商密码:根据得到的两个明文随机数Random_C 和 Random_S 与自己计算的 Pre-master,计算出协商密钥enc_key。enc_key=Fuc(random_C, random_S, Pre-Master)
    生成握手信息:使用约定的HASH计算握手消息,并通过协商密钥enc_key和约定好的算法对消息进行加密。
  4. 客户端将第三步得到的数据发送给服务器,分别为enc_pre_master、客户端发给服务器的通知(以后我们都使用约定好的算法和协商密钥进行通信)、握手信息。
  5. 服务器拿到第四步的数据后会进行私钥解密、计算协商密钥、解密握手信息、生成握手信息。私钥解密:使用自己的私钥从enc_pre_master中解密出Pre_master。计算协商密钥:服务器根据得到的两个明文随机数Random_C 和 Random_S 与解密出的 Pre-master,计算出协商密钥enc_key。enc_key=Fuc(random_C, random_S, Pre-Master)
    解密握手消息:使用协商秘钥enc_key解密握手信息,并验证HASH是否与客户端发送过来的一样。生成握手消息:使用约定的HASH计算握手消息,并通过协商密钥enc_key和约定好的算法对消息进行加密。
  6. 服务器将第三步得到的数据发送给客户端,分别为服务器发给客户端的通知(听你的,以后我们就用约定好的算法和协商密钥进行通信哦)、握手信息。
  7. 客户端解密握手信息,然后计算握手信息的HASH,如果与服务器发来的HSAH一样,则握手结束
  8. 握手成功后,所有的通信数据会通过之前协商密钥enc_key和约定的算法进行加密解密。

HTTP 与 HTTPS 的区别

  • HTTP 是明文传输协议,HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。
    在这里插入图片描述

  • HTTPS比HTTP更加安全,对搜索引擎更友好,利于SEO,谷歌、百度优先索引HTTPS网页;

  • HTTPS需要用到SSL证书,而HTTP不用;
    在这里插入图片描述

  • HTTPS标准端口443,HTTP标准端口80;

  • HTTPS基于传输层,HTTP基于应用层; http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。

  • HTTPS在浏览器显示绿色安全锁,HTTP没有显示;

HTTPS的缺点

(1)HTTPS协议握手阶段比较费时,会使页面的加载时间延长近50%,增加10%到20%的耗电;
(2)HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗;

  • HTTPS普遍认为性能消耗要大于HTTP,因为与纯文本通信相比,加密通信会消耗更多的CPU及内存资源。如果每次通信都加密,会消耗相当多的资源。
  • 但并非如此,用户可以通过性能优化、把证书部署在SLB或CDN,来解决此问题。
  • 举个实际的例子,“双十一”期间,全站HTTPS的淘宝、天猫依然保证了网站和移动端的访问、浏览、交易等操作的顺畅、平滑。通过测试发现,经过优化后的许多页面性能与HTTP持平甚至还有小幅提升,因此HTTPS经过优化之后其实并不慢。

(3)SSL证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要一般不会用。
(4)SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗。
(5)HTTPS协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。最关键的,SSL证书的信用链体系并不安全,特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值