目录
首先来讨论一下Http和Https的背景
Http协议(超文本传输协议)被用作Web浏览器和网站服务器之间传递信息,Http协议以明文发送内容,不提供任何形式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接获取到信息,因此,Http不适用于传入一些敏感信息(密码,支付信息等内容)
为了解决HTTP协议的安全性缺陷,出现了超文本传输安全协议HTTPS。HTTPS在HTTP的基础上引入了SSL(Secure Sockets Layer)协议或其继任者TLS(Transport Layer Security)协议,以提供更安全的数据传输。
在HTTPS中,SSL/TLS协议通过使用数字证书来验证服务器的身份,并确保通信的加密性和完整性。数字证书由受信任的第三方机构(如证书颁发机构)颁发,其中包含了服务器的公钥和其他相关信息。
基本概念
一、HTTP协议:
- 定义:HTTP(超文本传输协议)是一种用于在网络上传输数据的协议。
- 请求-响应模型:HTTP协议采用请求-响应模型,客户端发送请求,服务器返回响应。
- 数据传输:HTTP用于传输超文本内容,可以包含文本、图像、视频等多种形式的数据。
- 目标:HTTP的目标是使网络传输更高效,并能控制文档的显示顺序。
二、HTTPS协议:
- 定义:HTTPS(超文本传输安全协议)是在HTTP基础上引入了SSL或TLS协议,提供更安全的数据传输。
- 加密和身份认证:HTTPS使用加密和身份认证机制,保证数据在传输过程中的安全性。
- 建立连接:浏览器向服务器发送连接请求,服务器返回数字证书,浏览器验证证书的合法性,建立安全通道。
- 作用:HTTPS的作用主要体现在保障数据传输的安全性和确认网站真实性两方面。
区别
-
安全性:HTTPS通过使用SSL(Secure Sockets Layer)或TLS(Transport Layer Security)协议对传输的数据进行加密,使得数据在传输过程中不容易被窃听或篡改。而HTTP是明文传输,数据未经过加密,容易被攻击者截获并查看或篡改,安全性相对较差。
-
证书认证:为了确保连接的安全性和网站真实性,HTTPS需要服务器使用数字证书来进行身份认证。这些证书由权威的CA(Certificate Authority,数字证书认证机构)颁发,用于证明服务器的身份。而HTTP无需进行证书认证,任何人都可以建立一个HTTP服务器。
-
端口和连接方式:HTTP使用80端口进行通信,而HTTPS使用443端口。此外,HTTP使用简单的TCP连接来传输数据,而HTTPS在建立连接时需要进行SSL/TLS握手过程,需要额外的通信开销,因此比HTTP稍微慢一些。
-
性能和资源消耗:由于HTTPS需要进行加密和解密操作,以及证书认证等复杂过程,相较于HTTP而言,HTTPS在性能方面会稍微有所下降,并且需要更多的服务器资源进行处理。
工作原理
HTTP工作原理
-
客户端与服务器建立连接:客户端(通常是浏览器)向服务器发送连接请求。这个连接是通过TCP(传输控制协议)来实现的,一般使用的默认端口号是80。
-
客户端发送请求:客户端向服务器发送一个请求,请求包括以下信息:
- 统一资源标识符(URL):指定请求的资源路径和参数。
- 协议版本号:指示客户端所使用的HTTP协议版本。
- 请求修饰符:例如GET、POST等,用于指定请求的类型和操作。
- 客户端信息:包括浏览器类型、操作系统等。
- 许可内容:用于验证客户端对资源的访问权限。
-
服务器接受请求并返回响应:服务器接收到请求后,会根据请求的内容进行相应的处理。服务器会返回一个响应,响应的格式包括以下信息:
- 状态行:包含协议版本号和一个用于表示请求成功或错误的状态码。
- 服务器信息:包括服务器类型、版本号等。
- 实体信息:请求的资源内容。
- 可能的内容:响应中可能还包含其他的附加内容,如Cookie等。
-
客户端与服务器关闭连接:在完成请求和响应后,客户端和服务器会断开连接,释放资源。
Https工作原理
(1)客户端向服务端443端口发起HTTPS请求。该请求中携带了客户端支持的加密算法和哈希算法;
(2)服务端收到请求,选择浏览器支持的加密算法和哈希算法。
(3)服务端将算法和数字证书发送给客户端。该证书包含了用于认证目的的服务器标识,可以是向某个可靠机构申请的,也可以是自制的;
(4)客户端对服务器端的证书进行验证,这一部分是浏览器内置的TLS完成的,具体步骤如下:
- 首先浏览器会从内置的证书中搜索,找到该证书对应的机构,如果查到了对应的机构,则取出该机构颁发的公钥;如果没有找到,此时浏览器就会提示用户该证书不是由权威机构颁发,是不可信任的。
- 然后用机构的证书公钥解密,得到证书的内容和证书签名,内容包括网站的网址、网站的公钥、证书的有效期等。浏览器会先验证签名的合法性,签名通过后,浏览器验证证书记录的网址是否和当前网址是一致的,不一致会提示用户。如果网址一致会检查证书有效期,证书过期了也会提示用户。这些都通过认证时,浏览器就可以安全使用证书中的网站公钥了。
- 服务器生成一个随机密码串pre_master_secret,并使用服务器的公钥对其进行加密。
(5)客户端将加密的随机密码串传送给服务端。
(6)服务器用自己的私钥解密得到随机密码串(私钥),然后通过该随机密码串把网页内容进行对称加密,并传输给浏览器。
(7)浏览器用之前生成的私钥解密算法获取网页内容。
HTTPS优缺点
优点:
- 安全认证:使用HTTPS可以确保你连接的是正确的网站,避免被钓鱼网站欺骗。
- 数据加密:HTTPS通过加密技术保护数据,使得传输过程中的信息无法被窃取或篡改,确保数据的安全性。
- 防止中间人攻击:HTTPS ers大大增加了黑客进行中间人攻击的难度。
缺点:
- 速度稍慢:相比HTTP,HTTPS会导致页面加载时间延长,并增加一些额外的处理开销。
- 无法阻止所有攻击:HTTPS不能完全防止各种类型的攻击,如黑客攻击、拒绝服务攻击等。
- SSL证书问题:SSL证书的信用链体系存在安全风险,特别是在某些国家可以控制CA根证书的情况下。
- 成本问题:购买和维护SSL证书需要一定费用,对于个人网站或小型网站来说可能并不划算。
- IP绑定限制:每个SSL证书通常只能绑定到一个IP上,无法在同一IP上绑定多个域名。
HTTP请求消息和响应消息
在HTTP请求和响应的过程中传递的数据块就叫HTTP消息,包括要传送的数据和一些附加信息,并且要遵守规定好的格式。
请求消息
请求消息是指客户端向服务器端发送请求时所携带的数据块。
请求方式用来规定客户端与服务器端联系的类型。
HTTP协议中客户端8种请求方式如下:
响应消息
响应消息是指服务器端向客户端进行响应请求时所携带的数据块。
在响应消息中,对于客户端的每一次请求,服务器端都要给予响应,在响应的时候我们可以通过状态码告诉客户端此次请求是成功还是失败。
状态代码由3位数字组成,表示请求是否被理解或被满足。HTTP响应状态码的第一个数字定义了响应的类别,后面两位没有具体的分类,第1位数字有5种可能的取值:
1**:请求已接收,需要继续处理。
2**:请求已成功被服务器接收、理解并接受。
3**:为完成请求,客户端需进一步细化请求。
4**:客户端的请求有错误。
5**:服务器端出现错误。
HTTP协议常见的状态码
文章内容参考(http与https概述_https和http csdn_橘猫吃不胖~的博客-CSDN博客)
进行TLS握手时的通俗的解释!!
- 客户端向服务器发送连接请求。
- 服务器回应客户端,并将包含自己的公钥的数字证书发送给客户端。这相当于服务器提供了一个锁。
- 客户端收到服务器的数字证书后,首先验证该证书的有效性和真实性。这是为了确保客户端正在与合法的服务器通信。
- 客户端生成一个临时密钥(预主密钥),就像是制作一把用于保护数据的安全锁的钥匙。
- 客户端使用服务器提供的公钥(锁)来锁住这个临时密钥,相当于在钥匙上加上了一个锁。然后,客户端将这个加锁的临时密钥发送回服务器。
- 服务器收到加密的临时密钥后,使用自己的私钥(只有服务器知道的钥匙)来解锁这个加密的临时密钥。这就相当于服务器使用自己的私钥解开了锁,并得到了原始的临时密钥。
- 现在,客户端和服务器都拥有相同的临时密钥,它们可以使用这个临时密钥进行后续的通信。这个临时密钥就像是客户端和服务器之间共享的钥匙,用于加密和解密数据。