HTTP的知识具体可以查看本篇博客: Web基础与HTTP协议 - 掘金 (juejin.cn)
一 知识点回顾
| 状态码首位 | 已定义范围 | 分类 |
|---|---|---|
| 1xx | 100-101 | 信息提示 |
| 2xx | 200-206 | 成功 |
| 3xx | 300-305 | 重定向 |
| 4xx | 400-415 | 客户端错误 |
| 5xx | 500-505 | 服务端错误 |
1.2 HTTP常见状态码
| 状态码 | 功能描述 |
|---|---|
| 200 | 一切正常 |
| 301 | 永久重定向 |
| 302 | 临时重定向 |
| 401 | 用户名或密码错误 |
| 403 | 禁止访问(客户端IP地址被拒绝) |
| 404 | 请求的文件不存在 |
| 414 | 请求URI头部过长 |
| 500 | 服务器内部错误 |
| 502 | 无效网关 |
| 503 | 当前服务不可用 |
| 504 | 网关请求超时 |
二 HTTP访问的过程
1、客户端通过域名进行访问,先进行DNS域名解析。
2、之后客户端请求与web服务器建立TCP连接(三次握手)。
3、建立连接后,客户端向web服务器发送一个HTTP请求。
4、服务器响应HTTP请求,客户端的浏览器得到HTML代码。
5、浏览器解析HTML代码,并请求HTML代码中的资源。(浏览器拿到HTML文件后,开始解析HTML代码,遇到静态资源时,就向服务器去请求下载。)
6、断开TCP连接(四次挥手),浏览器对页面进行渲染呈现给用户。
三 HTTPS原理
3.1 TLS/SSL 的功能实现主要依赖于三类基本算法
散列函数 、对称加密和非对称加密,其利用非对称加密实现身份认证和密钥协商,对称加密算法采用协商的密钥对数据加密,基于散列函数验证信息的完整性。
非对称加密是实现身份认证和密钥协商;
对称加密是对信息进行加密;
3.2 SSL/TLS协议和证书的关系
为保证网络安全,我们需要给服务器颁发证书,这个证书可以自己生成,但是自己颁发证书是不安全的,可以被别人伪造,所以我们一般都是在第三方认证机构购买证书 。那么问题来了,证书到底和协议是否有关联,我们是否需要区分SSL证书和TLS证书呢?答案是否定的,证书不依赖协议,和协议没有太大关联,我们也不需要去纠结是使用SSL证书和TLS证书,协议由服务器配置决定,证书是配合协议一块使用的。
3.3 私钥、公钥、对称密钥的区别?分别是什么?
对称密钥只有一个,可以是字符串,也可以是数字,对应的加密方法是对称加密。
公钥和私钥成对出现.公开的密钥叫公钥,只有自己知道的叫私钥
1.公钥和私钥成对出现.公开的密钥叫公钥,只有自己知道的叫私钥
2.公钥用于敏感信息的加密,私钥用于签名.所以公钥的作用是保证数据安全,私钥的作用的标记信息的发送方.
3.用公钥加密的数据只有对应的私钥可以解密,用私钥签名只有对应的公钥可以验签.
4.用公私钥加解密的方式叫作非对称加密.
5.其实通信双方使用同一对公私钥也是可以的.
3.4 对称加密
这种方式加密和解密同用一个密钥。加密和解密都会用到密钥。以对称加密方式加密时必须将密钥也发给对方。
1:许许多多的客户端,不可能都用同一秘钥进行信息加密,该怎么办呢?
解决办法:一个客户端使用一个密钥进行加密
2:既然不同的客户端使用不同的密钥,那么对称加密的密钥如何传输?
解决办法:只能是「一端生成一个秘钥,然后通过HTTP传输给另一端」
3:这个传输密钥的过程,又如何保证加密?「如果被中间人拦截,密钥也会被获取,」 那么你会说对密钥再进行加密,那又怎么保存对密钥加密的过程,是加密的过程?
解决办法:非对称加密
3.5 使用证书访问的工作流程:
- 客户端发起HTTPS请求,连接到服务器的443端口。
- 服务器必须要先申请好一套数字证书(证书内容有公钥、证书颁发机构、失效日期等)。
- 服务器将自己的数字证书发送给客户端(公钥在证书里面,私钥由服务器持有)。
- 客户端收到数字证书之后,会先验证证书的合法性。如果证书验证通过,就会使用伪随机数生成器(/dev/random)随机生成一个【对称密钥】,使用证书的公钥加密这个【对称密钥】。
- 客户端将公钥加密后的【对称密钥】发送到服务器。
- 服务器接收到客户端发来的密文密钥之后,用自己之前保留的私钥对其进行非对称解密,解密之后就得到客户端的【对称密钥】,然后用客户端的【对称密钥】对返回数据进行加密,这样传输的数据都是密文了。
- 服务器将加密后的密文数据返回到客户端。
- 客户端收到后,用自己的【对称密钥】对其进行对称解密,得到服务器返回的数据。
3.6 HTTP 与 HTTPS 的区别
- HTTP 是明文传输协议,HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。
- HTTPS比HTTP更加安全,对搜索引擎更友好,利于SEO,谷歌、百度优先索引HTTPS网页;
- HTTPS需要用到SSL证书,而HTTP不用【(HTTPS是安装SSL的服务器,HTTP是未安装SSL的服务器)】;
- HTTPS标准端口443,HTTP标准端口80;
- HTTPS基于传输层,HTTP基于应用层;
- HTTPS在浏览器显示绿色安全锁,HTTP没有显示;
3.7 既然HTTPS那么安全可靠,那为何不所有的Web网站都使用HTTPS
- 首先,很多人还是会觉得HTTPS
实施有门槛,这个门槛在于需要权威CA颁发的SSL证书。从证书的选择、购买到部署,传统的模式下都会比较耗时耗力。 - 其次,HTTPS普遍认为性能消耗要大于HTTP,因为与纯文本通信相比,加密通信会消耗更多的CPU及内存资源。如果每次通信都加密,
会消耗相当多的资源,平摊到一台计算机上时,能够处理的请求数量必定也会随之减少。但事实并非如此,用户可以通过性能优化、把证书部署在SLB或CDN,来解决此问题。举个实际的例子,“双十一”期间,全站HTTPS的淘宝、天猫依然保证了网站和移动端的访问、浏览、交易等操作的顺畅、平滑。通过测试发现,经过优化后的许多页面性能与HTTP持平甚至还有小幅提升,因此HTTPS经过优化之后其实并不慢。 - 除此之外,想要节约购买证书的
开销也是原因之一。要进行HTTPS通信,证书是必不可少的。而使用的证书必须向认证机构(CA)购买。 - 最后是
安全意识。相比国内,国外互联网行业的安全意识和技术应用相对成熟,HTTPS部署趋势是由社会、企业、政府共同去推动的。
HTTPS工作流程总结
- 客户端发送https请求到服务端的443端口(NDS解析、TCP连接)
- 服务端会先发送服务端证书文件给客户端
- 客户端会先验证服务端证书文件的有效性
- 客户端验证通过后会使用服务端证书文件里的公钥加密自己使用伪随机数生成的会话密钥,并发送给服务端
- 服务端会使用私钥对加密的会话密钥进行解析获取会话密钥
- 之后服务端和客户端的通讯都会使用会话密钥传输和解密获取