HTTPS工作原理

前言

近几年,随着互联网的发展,一直习以为常的 http 协议正在逐渐被 https 取代.https 已经成为传输协议的主流.

读完本文,希望你能明白:

  • http 通信存在什么问题
  • https 是如何改进 http 存在的问题
  • https 的工作原理是什么

首先先来初步地回顾一下 http 的一些相关概念

1. http 篇

1.1 介绍

http 是 Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会 (World Wide Web Consortium) 和 Internet 工作小组IETF(Internet Engineering Task Force)合作的结果,(他们)最终发布了一系列的RFC,RFC 1945定义了 HTTP/1.0 版本.其中最著名的就是RFC 2616.RFC 2616定义了今天普遍使用的一个版本——HTTP 1.1.

http 协议是用于从WWW服务器传输超文本到本地浏览器的传送协议.它可以使浏览器更加高效,使网络传输减少.它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等.

http 是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型.http 是一个无状态的协议.

1.2 在 TCP/IP 协议栈的位置

http 协议通常承载于 TCP 协议之上,有时也承载于 TLS 或 SSL 协议层之上,这个时候,就成了我们常说的 https. 如下图所示:

在这里插入图片描述
默认 http 的端口号为80,https 的端口号为443.

1.3 工作流程

直接看图:

在这里插入图片描述
1.4 特点

  1. 简单快速: 客户向服务器请求服务时,只需要传送请求方法和路径.请求方法常用的有 get head put delete post.每种方法规定了客户与服务器联系的类型不同.由于 http 协议简单,使得 http 服务器的程序规模小,因此通信速度很快
  2. 灵活: http 允许传输任意类型的数据对象
  3. 无连接: 无连接的含义是限制每次连接只处理一个请求.服务器处理完客户的请求,并收到客户的应答后就断开连接.采用这种方式可以节省传输时间
  4. 无状态: http 协议是无状态的, http 协议自身不对请求和响应之间的通信状态进行保存.任何两次请求之间都没有依赖关系.直观地说,就是每个请求都是独立的.与前面的请求和后面的请求都没有直接联系.协议本身并不保留之前一切的请求或相应报文的信息.这是为了更快的处理大量事务,确保协议的可伸缩性,而特意把 http 协议设计成如此简单的

简单过完一下相关概念,来看看 https

2. https

2.1 什么是 https
https 是在 http 上建立 ssl 加密层,并对传输数据进行加密,是 http 协议的安全版.现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面.
https的主要作用是:

  1. 对数据进行加密,并建立一个信息安全通道,来保证传输过程中的数据安全.
  2. 对网站服务器进行真实身份认证

我们经常会在 web 的登录页面和购物结算界面等使用 https 通信.使用 https 通信时,不再用 http://,而是改用https://.另外,当浏览器访问 https 通信有效的 web 网站时,浏览器的地址栏内会出现一个带锁的标记.对 https 的显示方式会因为浏览器的不同而有所改变.

2.2 为什么需要 https
在 http 协议中有可能存在信息窃取或身份伪装等安全问题.使用 https 通信机制可以有效地防止这些问题,接下来,我们先来了解一下 http 协议存在哪些问题:

  • 通信使用明文(不加密),内容可能被窃听

由于 http 本身不具备加密的功能,所以也无法做到对通信整体(使用 http 协议通信的请求和响应的内容)进行加密.即, http报文使用明文方式发送
http 明文协议的缺陷是导致数据泄露,数据篡改,流量劫持,钓鱼攻击等安全问题的重要原因.http协议无法加密数据,所有通信数据都在网络中明文"裸奔".通过网络的嗅探设备及一些技术手段,就可还原http报文内容

  • 无法证明报文的完整性,所有可能遭到篡改

所谓完整性是指信息的准确度.若无法证明其完整性,通常也就意味着无法判断信息是否准确.由于http协议无法证明通信的报文完整性,因此,在请求或相应送出之后直到对方接受之前的这段时间内,即使请求或相应的内容遭到篡改,也没有办法获悉.也就是说,没有任何办法确认,发出的请求/响应和接收到的请求/响应式前后相同的.

  • 不验证通信方的身份,因此有可能遭遇伪装

http 协议中的请求和响应不会对通信方进行确认.在http协议通信时,由于不存在确认通信方的处理步骤,任何人都可以发起请求.另外,服务器只要接收到请求,不管对方是谁都会返回一个响应(但也仅限于发送端的 IP 地址和端口号没有被 web 服务器设定限制访问的前提下)

http协议无法验证通信方身份,任何人都可以伪造虚假服务器欺骗用户,实现"钓鱼欺诈",用户无法察觉

反观 https 协议,它比http协议相比多了以下优势:

  • 数据隐私性: 内容经过对称加密,每个连接生成一个唯一的加密密钥
  • 数据完整性: 内容传输经过完整性校验
  • 身份认证: 第三方无法伪造服务端(客户端)身份

2.3 https如何解决http上述问题?

https 并非是应用层的一种新协议.只是 http 通信接口部分用 SSL 和 TLS 协议代替而已.

通常, http 直接TCP通信.当使用 SSL 时,则演变成先和 SSL 通信,再由 SSL 和 TCP通信了.简而言之, 所谓 https, 其实就是身披 SSL 协议这层外壳的 http

在采用 SSL 后, http 就拥有了 https 的加密,证书和完整性保护这些功能.也就是说 http 加上加密处理和认证以及完整性保护后即是 https

https 协议的主要功能基本多依赖于 TLS/SSL 协议, TLS/SSL 的功能主要依赖于三类基本算法: 散列函数,对称加密和非对称加密,其利用非对称加密实现身份认证和密钥协商,对称加密算法采用协商的密钥对数据加密,基于散列函数验证信息的完整性.

2.3.1 解决内容可能被窃听的问题-加密

方法一: 对称加密

这种方式加密和解密同用一个密钥,加密和解密都会用到密钥.没有密钥就无法对密码解密,反过来说,任何人只要持有密钥就能解密了.

以对称加密方式加密是必须将密钥也发给对方,可究竟怎样才能安全地转交?在互联网上转发密钥时,如果通信被监听那么密钥就可能会落入攻击者之手,同时也就失去了加密的意义.另外还得设法安全地保管接受到的密钥.

方法二: 非对称加密

公开密钥加密使用一对非对称的密钥,一把叫做私有密钥,另一把叫做公开密钥.顾名思义,私有密钥不能让其他任何人知道,而公开密钥则可以随意发布,任何人都可以获得.

使用公开密钥加密方式,发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密.利用这种方式,不需要发送用来解密的私有密钥,也不必担心密钥被攻击者窃听而盗走.

非对称加密的特点是信息传输一对多,服务器只需要维持一个私钥就能够和多个客户端进行加密通信.

这种方式有以下缺点:

  • 公钥是公开的,所以针对私钥加密的信息,黑客截获后可以使用公钥进行解密,获取其中的内容;
  • 公钥并不包含服务器的信息,使用非对称加密算法无法确保服务器身份的合法性,存在中间人攻击的风险,服务器发送给客户端的公钥可能在传送过程中被中间人截获并篡改;
  • 使用非对称加密在数据加密解密过程需要消耗一定时间,降低了数据传输效率

方法三: 对称加密+非对称加密(HTTPS采用这种方式)

使用对称密钥的好处是解密的效率比较快,使用非对称密钥的好处是可以使得传输的内容不能被破解,因为就算你拦截到了数据,但是没有对应的私钥,也是不能破解内容的.就比如说你抢到了一个保险柜,但是没有保险柜的钥匙也不能打开保险柜.那我们就将对称加密与非对称加密结合起来,充分利用两者各自的优势,在交换密钥环节使用非对称加密方式,之后的建立通信交换报文阶段则使用对称加密方式.

具体做法是:发送密文的一方使用对方的公钥进行加密处理“对称的密钥”,然后对方用自己的私钥解密拿到“对称的密钥”,这样可以确保交换的密钥是安全的前提下,使用对称加密方式进行通信.所以,HTTPS采用对称加密和非对称加密两者并用的混合加密机制.

2.3.2 解决报文可能遭篡改问题——数字签名

网络传输过程中需要经过很多中间节点,虽然数据无法被解密,但可能被篡改,那如何校验数据的完整性呢?----校验数字签名.

数字签名有两种功效:

  • 能确定消息确实是由发送方签名并发出来的,因为别人假冒不了发送方的签名.
  • 数字签名能确定消息的完整性,证明数据是否未被篡改过.

数字签名如何生成:

将一段文本先用Hash函数生成消息摘要,然后用发送者的私钥加密生成数字签名,与原文文一起传送给接收者.接下来就是接收者校验数字签名的流程了.

校验数字签名流程:

接收者只有用发送者的公钥才能解密被加密的摘要信息,然后用HASH函数对收到的原文产生一个摘要信息,与上一步得到的摘要信息对比.如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性.这个过程的前提是接收者要知道发送者的公钥.和消息本身一样,公钥不能在不安全的网络中直接发送给接收者,此时就需要引入证书颁发机构(CA),接收者客户端内置了所有受CA信任的证书.CA对发送者的公钥数字签名后生成证书.

2.3.3 解决通信方身份可能被伪装的问题——数字证书

数字证书认证机构处于客户端与服务器双方都可信赖的第三方机构的立场上.

我们来介绍一下数字证书认证机构的业务流程:

  • 服务器的运营人员向第三方机构CA提交公钥、组织信息、个人信息(域名)等信息并申请认证;
  • CA通过线上、线下等多种手段验证申请者提供信息的真实性,如组织是否存在、企业是否合法,是否拥有域名的所有权等;
  • 如信息审核通过,CA会向申请者签发认证文件-证书.证书包含以下信息:申请者公钥、申请者的组织信息和个人信息、签发机构 CA的信息、有效时间、证书序列号等信息的明文,同时包含一个签名. 其中签名的产生算法:首先使用散列函数计算公开的明文信息的信息摘要,然后采用 CA的私钥对信息摘要进行加密,密文即签名;
  • 客户端 Client 向服务器 Server 发出请求时,Server 返回证书文件;
  • 客户端 Client 读取证书中的相关的明文信息,采用相同的散列函数计算得到信息摘要,然后利用对应 CA的公钥解密签名数据,对比证书的信息摘要,如果一致,则可以确认证书的合法性,即服务器的公开密钥是值得信赖的.
  • 客户端还会验证证书相关的域名信息、有效时间等信息;客户端会内置信任CA的证书信息(包含公钥),如果CA不被信任,则找不到对应 CA的证书,证书也会被判定非法.

2.4 https 工作流程

  1. Client发起一个HTTPS(比如https://juejin.im/user/5a9a9cdcf265da238b7d771c)的请求,根据RFC2818的规定,Client知道需要连接Server的443(默认)端口。

  2. Server把事先配置好的公钥证书(public key certificate)返回给客户端。

  3. Client验证公钥证书:比如是否在有效期内,证书的用途是不是匹配Client请求的站点,是不是在CRL吊销列表里面,它的上一级证书是否有效,这是一个递归的过程,直到验证到根证书(操作系统内置的Root证书或者Client内置的Root证书)。如果验证通过则继续,不通过则显示警告信息。

  4. Client使用伪随机数生成器生成加密所使用的对称密钥,然后用证书的公钥加密这个对称密钥,发给Server。

  5. Server使用自己的私钥(private key)解密这个消息,得到对称密钥。至此,Client和Server双方都持有了相同的对称密钥。

  6. Server使用对称密钥加密“明文内容A”,发送给Client。

  7. Client使用对称密钥解密响应的密文,得到“明文内容A”。

  8. Client再次发起HTTPS的请求,使用对称密钥加密请求的“明文内容B”,然后Server使用对称密钥解密密文,得到“明文内容B”。

2.5 http和https的区别

  • HTTP 是明文传输协议,HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。
  • HTTPS比HTTP更加安全,对搜索引擎更友好,利于SEO,谷歌、百度优先索引HTTPS网页;
  • HTTPS需要用到SSL证书,而HTTP不用;
  • HTTPS标准端口443,HTTP标准端口80;
  • HTTPS基于传输层,HTTP基于应用层;
  • HTTPS在浏览器显示绿色安全锁,HTTP没有显示;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HTTPSHTTP(Hypertext Transfer Protocol)协议的加密版本,它是超文本传输协议在安全层面上的升级,主要用来保护数据传输的安全,防止数据被窃取或篡改。HTTPS工作原理大致包括以下几个关键步骤: 1. **SSL/TLS握手**: 客户端(浏览器)发起一个HTTPS连接请求,会首先发送一个“ClientHello”消息给服务器,请求使用SSL/TLS进行加密通信。服务器收到后返回一个包含服务器证书、公钥和服务器支持的加密算法列表的“ServerHello”消息。 2. **证书验证**: 客户端验证服务器证书,确保证书是由受信任的CA(Certificate Authority,证书颁发机构)签发的,并且证书中的域名与请求的URL匹配。这个过程确认服务器的身份。 3. **密钥交换**: 服务器使用私钥对一个预定义的随机数(称为“ premaster secret”)进行签名,生成一个共享的加密密钥(session key),用于后续的数据加密。 4. **加密通信**: 使用共享的session key,客户端和服务器之间开始使用TLS套件中的对称加密算法(如AES)进行数据的加密传输,保证了数据的机密性。 5. **数据传输**: 加密后的HTTP请求和响应在双方之间交换,只有拥有正确密钥的客户端和服务器才能解密并读取内容。 6. **完整性校验**: 除了加密,HTTPS还使用哈希函数(如SHA-1或SHA-256)对数据进行校验,确保在传输过程中数据没有被篡改。 7. **访问控制**: HTTPS还可以结合服务器配置的HSTS(HTTP Strict Transport Security)策略,强制客户端始终使用HTTPS连接,提高安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值