date
Apr 7, 2023 06:32 AM
type
status
slug
summary
tags
category
updated
Oct 24, 2024 12:53 PM
icon
password
前言
在实际开发中,部署的项目在服务器上,通过域名来访问,是否会发现有的域名是http协议有的是https协议。那么同一个网站,他既可以http访问,又可以https访问,他们是什么呢,他们之间有什么区别呢?
简单介绍下http和https
http中文名称是超文本网络传输协议,深究一下呢,他是一种分布式、协作式和超媒体信息系统的应用层协议,简单的说就是接受和发送HTML页面的方法,用来在Web和服务器之间传递信息。
https是基于SSL+HTTP组合而来的,中文名称就是超文本网络传输安全协议,由Http通信然后再把信息通过SSL/TLS加密。这样的话就能让数据很安全,不会被第三方获取你发了什么信息。
Http和Https的区别
- http默认端口是80,https的默认端口是443
- http不需要CA证书,https需要CA证书
- http需要TCP握手3次,https的话再Http的3次握手基础上,还需要SSL/TLS的加密握手9次,总计12次
- 从连接的方式上看就知道http是明文发送,而https是需要加密发送的信息的
- 从第三也可知道,http的速度比https的速度快,占用服务器资源少
Http是怎么进行连接的?
首先,浏览器根据url获取域名对应的IP,如果没有会去DNS查找。当拿到服务器IP之后,
- 第一次握手会给服务器发送一个随机值(准确的名称是同步序列值)SYN包(也可以说是SYN=1,seq=x,ACK=0),设置发送需要为X给服务器。进入SYN_SEND状态,等待服务器回应。
- 第二次握手是服务器拿到之后会确认ACK=X+1,并且也发送个SYN的包,这个包就是(SYN=1,Seq=y,ACK=x+1)给客户端,服务器进入SYN_RECV状态。
- 第三次握手客户端拿到了服务器给的SYN包,也就是同步序列包,然后发送确认包ACK(ack=y+1),大致包的样子就是(Seq=x+1,Ack=y+1)。发送给服务器之后,服务器确认,然后就进入了ESTABLISHED状态,,完成了3次握手
那么Https是怎么工作的呢?
Https通过上面的Http的3次握手,之后就进入了SSL/TLS的加密握手。
- 客户端发送Url连接了一下服务器。
- 服务器会生成公钥和私钥(公钥和私钥,分别就像一把锁和一把能打开这个锁的钥匙)。
- 就会把自己的公钥发送给客户端。
- 客户端拿到了公钥(也就是之前提到的CA证书),如果没通过就会提示这个网站危险的页面,那么在通过验证的时候会生成一个随机值,那么这个随机值就是客户端的私钥了。
- 就会用服务器给的私钥加密随机值发送给服务器。
- 服务器拿到了加密数据通过自己的私钥解锁出客户端的随机key,那么用该key来加密要发送的内容。
- 发送加密的内容给客户端
- 客户端拿到了加密内容,用key解密出来。