HTTPS协议实现的原理

简介: HTTPS协议,相关的概念包括SSL、非对称加密、CA证书先说一下什么是对称加密和非对称加密。双方加密解密都用相同密钥的算法,称为对称加密算法。使用对称加密的缺点,使用对称加密双方都知道密钥和算法。加密解密用的是一个密钥,加密是正向的过程,解密是逆向过程。

HTTPS协议,相关的概念包括SSL、非对称加密、CA证书

先说一下什么是对称加密和非对称加密。

双方加密解密都用相同密钥的算法,称为对称加密算法。

使用对称加密的缺点,使用对称加密双方都知道密钥和算法。加密解密用的是一个密钥,加密是正向的过程,解密是逆向过程。

非对称加密,在非对称加密中,加密和解密用的不是一个密钥,当开发一个网站,我们的用户之间的通信用非对称加密。用户发送请求时,用户用一把钥匙加密数据,服务端用另一把钥匙解密。在这个过程中,服务端拥有的是私钥,用户拥有的是公钥,很多用户可以使用同一个公钥,只有服务端才拥有私钥。

公钥发送的数据必须用私钥解密,私钥发送的数据必须用公钥解密。网站发送数据给用户,用私钥加密,用户用公钥解密。用户发送数据给网站时,用公钥加密,网站用私钥解密。如果公钥不小心被盗,无法通过公钥篡改数据,因为他拿不到私钥。

在非对称加密中,密钥通常是由提供服务的一方创建的。每次创建是一对公私钥对,然后提供者将公钥给用户,私钥自己保留。

接下来说下HTTPS协议的原理,大家都会说HTTPS协议是安全的,因为对传输的数据进行了加密,而加密过程使用了非对称加密。但是实际上,非对称加密只是用在了证书验证上,而内容的传输使用的是对称加密。

HTTPS整理过程分为证书验证和数据传输阶段。具体交互如下。
image.png

HTTPS协议实现的原理
第一个阶段是,证书验证阶段,

浏览器向服务端发起HTTPS请求,

服务端返回HTTPS证书(包含公钥)

客户端验证证书是否合法,如果不合法就是发出告警提示。

第二个阶段是,数据传输阶段

当证书验证合法后,再本地生成随机数

通过公钥加密随机数,并把加密后的随机数传输到服务端。

服务端通过私钥对随机数进行解密

服务端通过客户端传入的随机数构造对称加密算法,对返回结果内容进行加密后传输。

那么为什么数据传输使用的对称加密呢?

首先非对称加密的加密和解密效率非常低,但是客户端和服务端一般存在大量的交互,非对称加密的效率无法接受。另外,在HTTPS的场景中只有服务端保存了私钥,一对公私钥只能实现单向的加解密,所以HTTPS中内容传输加密采取的是对称加密。

为什么需要CA认证机构颁发证书?

HTTP协议被认为不安全是因为传输过程容易被监听者监听、伪造服务器。而HTTPS协议主要解决的是网络传输的安全性问题。假设不存在认证机构的时候,任何人都可以制作证书,这样就会存在一个安全风险,中间人攻击。由于缺少对证书的验证,所以客户端虽然发起的是HTTPS请求,但是客户端完全不知道自己的网络被拦截了,传输内容被中间人全部窃取。

那么浏览器是如何保证CA证书的合法性?

证书包含了信息如下:

颁发机构信息

公钥

公司信息

域名

有效期

浏览器是如何验证证书的合法性?

浏览器发起的HTTPS请求时,服务端会返回网站的SSL证书,浏览器需要对证书做以下验证:

验证域名、有效期等信息是否正确。证书上都包含这些信息,比较容易完成验证。

判断证书来源是否合法,每份签发证书都可以根据验证链查找到对应的根证书,操作系统、浏览器会在本地存储权威机构的根证书,利用本地根证书可以对对应机构签发证书完成来源验证。

判断证书是否被篡改。需要与CA服务器进行校验。

判断证书是否被吊销。

如果验证不通过浏览器通常会提示安全风险,但不限制网站不能访问。

目录
相关文章
|
2月前
|
前端开发
webpack如何设置devServer启动项目为https协议
webpack如何设置devServer启动项目为https协议
184 0
|
3天前
|
安全 网络协议 应用服务中间件
一文读懂HTTPS⭐揭秘加密传输背后的原理与Nginx配置攻略
一文读懂HTTPS⭐揭秘加密传输背后的原理与Nginx配置攻略
|
4天前
|
缓存 安全 算法
网络原理 HTTP _ HTTPS
网络原理 HTTP _ HTTPS
10 0
|
7天前
|
存储 算法 安全
[计算机网络]---Https协议
[计算机网络]---Https协议
|
13天前
|
安全 网络协议 算法
【计算机网络】http协议的原理与应用,https是如何保证安全传输的
【计算机网络】http协议的原理与应用,https是如何保证安全传输的
|
14天前
|
网络协议 安全 算法
HTTP协议与HTTPS协议
HTTP协议与HTTPS协议
|
15天前
|
网络协议 安全
【专栏】`curl`是广泛用于网络编程和自动化脚本的命令行工具,支持HTTP、HTTPS等协议
【4月更文挑战第28天】`curl`是广泛用于网络编程和自动化脚本的命令行工具,支持HTTP、HTTPS等协议。在处理大文件或慢速服务器时,设置超时参数至关重要。本文介绍了`curl`的超时参数,如`-m`(最大操作时间)、`-c`(连接超时)、`--dns-timeout`(DNS解析超时)和`-t`(时间条件)。通过示例展示了如何设置这些超时,并提到了一些高级技巧和注意事项,如错误处理和带宽限制。合理设置超时能提高效率和可靠性,对编写健壮的自动化脚本非常有用。
|
17天前
|
安全 网络协议 算法
秒懂HTTPS接口(原理篇)
【4月更文挑战第24天】秒懂HTTPS接口(原理篇)
38 4
秒懂HTTPS接口(原理篇)
|
24天前
|
安全 网络安全 数据安全/隐私保护
HTTPS协议
HTTPS协议
22 0
|
1月前
|
安全 网络协议 网络安全
网络原理(5)--HTTPS是如何进行加密的
网络原理(5)--HTTPS是如何进行加密的
17 0