HTTPS协议概述
HTTPS(Hypertext Transfer Protocol over Secure Socket Layer,基于安全套接字层的超文本传输协议),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,通过 SSL证书来验证服务器的身份,并为浏览器和服务器之间的通信进行加密。其所用的端口号是443。
SSL和TLS
SSL:SSL(Secure Socket Layer,安全套接字层),是Netscape公司设计的主要用于web的安全传输协议。这种协议在WEB上获得了广泛的应用。通过证书认证来确保客户端和网站服务器之间的通信数据是加密安全的。
SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层: SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
TLS:TLS(Transport Layer Security,传输层安全协议),用于两个应用程序之间提供保密性和数据完整性。
SSL 发展到 v3 时已经证明了它自身是一个非常好的安全通信协议,于是互联网工程组 IETF 在 1999 年把它改名为 TLS(传输层安全,Transport Layer Security),正式标准化,版本号从 1.0 重新算起,所以 TLS1.0 实际上就是 SSLv3.1。TLS 1.0是IETF(Internet Engineering Task Force,Internet工程任务组)制定的一种新的协议,它建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本,可以理解为SSL 3.1(可简单理解为同一事物不同阶段的不同称呼)。该协议由两层组成: TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake)。较低的层为 TLS 记录协议,位于某个可靠的传输协议(例如 TCP)上面。TLS的主要目标是使SSL更安全,并使协议的规范更精确和完善。
TLS 已经发展出了三个版本,分别是 2006 年的 1.1、2008 年的 1.2 和2018年的 1.3。每个新版本都紧跟密码学的发展和互联网的现状,持续强化安全和性能,已经成为了信息安全领域中的权威标准。
目前应用的最广泛的 TLS 是 1.2,而之前的协议(TLS1.1/1.0、SSLv3/v2)都已经被认为是不安全的。
为什么使用HTTPS
HTTPS协议主要是为了解决HTTP协议存在的安全问题,使用HTTP协议传输,存在以下风险:
(1) 窃听⻛险,⽐如通信链路上可以获取通信内容,从而盗取用户账号。
(2) 篡改⻛险,⽐如强制植⼊垃圾⼴告,带来视觉污染。
(3) 冒充⻛险,⽐如冒充他人身份购物,导致用户金钱损失。
HTTPS原理
HTTPS就是在应用层和网络层补充了SSL/TSL。HTTP 的请求/响应一般可分为六步:(1) 建立TCP连接;(2) 发送HTTP请求;(3) 服务器处理请求;(4) 返回HTTP响应;(5) 释放TCP连接;(6) 浏览器解析返回的资源和数据。而,HTTPS是在完成TCP连接建立后,再补充一个SSL连接建立的过程,建立安全连接后,才是发送HTTP请求等后续事宜。接下来重点介绍下SSL建立连接(这里指TLS 1.2)的过程。
(1) 在 TCP 建立连接之后,浏览器会首先发一个"Client Hello"消息,也就是跟服务器“打招呼”。里面有客户端的版本号、支持的密码套件,还有一个随机数(Client Random)明文,用于后续生成会话密钥。
(2) 服务器收到"Client Hello"后,会返回一个"Server Hello"消息。把版本号对一下,也给出一个随机数(Server Random)明文,然后从客户端提供的密码套件列表里选一个作为本次通信使用的密码套件(如 ECDHE 算法)。同时,服务器为了证明自己的身份,就把证书(Server Certificate)也发给了客户端。因为服务器已经选择了密码套件,所以它会在证书后发送"Server Key Exchange"消息,里面是公钥(Server Params),用来实现密钥交换算法,再加上自己的私钥签名认证。
之后是“Server Hello Done”消息,表示"打招呼完毕"。这样第一个消息往返就结束了(两个 TCP 包),结果是客户端和服务器通过明文共享了三个信息:Client Random、Server Random 和 Server Params。
(3) 浏览器拿到服务器的证书后,开始确认证书的真实性,用证书公钥验证签名。确认服务器身份后,浏览器根据已选择的密码套件,生成一个公钥(Client Params),然后用"Client Key Exchange"消息发给服务器。现在浏览器和服务器手里都拿到了密钥交换算法的两个参数(Client Params、Server Params),接着就用密码套件算法,算出"Pre-Master"。现在浏览器和服务器手里有了三个随机数:Client Random、Server Random 和 Pre-Master。用这三个作为原始材料,就可以生成用于加密会话的主密钥,叫"Master Secret"。而黑客因为拿不到"Pre-Master",所以也就得不到主密钥。
为什么需要Client Random、Server Random 和 Pre-Master 三个随机数?这主要是因为,TLS 协议不信任浏览器或服务器伪随机数的可靠性,为了保证真正的"完全随机"、“不可预测”,就把三个不可靠的随机数混合起来,那么"随机"的程度就更高了,安全性也就更有保障。
有了主密钥和基于主密钥派生的会话密钥(Session Secret),握手就快结束了。浏览器发送一个"Change Cipher Spec"消息,然后再发送一个"Finished"消息,把之前所有发送的数据做个摘要,再加密一下,让服务器做个验证。
(4) 服务器接收到浏览器的验证请求后,按照相同的步骤,分别发送"Change Cipher Spec"和"Finished"消息。
(5) 完成上述操作后,TSL连接就建立完成了,接下来就是通过加密的方式来发送HTTP请求和响应。
为什么使用证书
简单来说,证书+数字签名的方式,可以保证证书内容不被篡改,防止"中间人攻击",相当于告诉了浏览器验证服务器身份的手段,也即单向认证。
单向认证和双向认证
单向认证就是客户端需要认证服务端。
双向认证和单向认证原理基本差不多,主要区别是除了客户端需要认证服务端以外,服务端对客户端也需要认证。什么场景下需要验证客户端呢?比如一些银行业务,银行会要求客户必须在电脑上插入它们签发的U盾之类的东西,或者安装什么控件,这里就类似客户端证书的概念,没有这个证书的人无法使用银行提供的业务。
每次进行HTTPS请求时都必须在SSL/TLS层进行握手传输密钥吗?
每次请求都经历一次密钥传输过程非常耗时,那怎么达到只传输一次呢?服务器会为每个浏览器维护一个session ID,在TLS握手阶段传给浏览器,浏览器生成好密钥传给服务器后,服务器会把该密钥存到相应的session ID下,之后浏览器每次请求都会携带session ID,服务器会根据session ID找到相应的密钥并进行解密加密操作,这样就不必要每次重新制作、传输密钥了。
HTTPS用的是对称加密还是非对称加密
要回答这个问题,需要再梳理一下HTTPS的原理。HTTPS原理见上文。
介绍完HTTPS的原理,就可以知道,HTTPS使用非对称加密传输一个对称密钥,让服务器和浏览器都得知。然后两边都使用这个对称密钥来加密解密收发数据。因为传输密钥K是用非对称加密方式,很难破解比较安全。而具体传输数据则是用对称加密方式,加快传输速度。两全其美。
云服务如何实现HTTPS
对云服务来说,没有必要在每个微服务里实现HTTPS,网上也有很多面向Spring Boot实现HTTPS的文章是一种误导。对于云服务来说,只需在服务入口处实现即可,常见的实现场景有两种,一种是面向静态资源的CDN,另一种是面向服务的LB。当然,可能还包括防火墙等其他情况。具体可以参考这两篇WIKI:一文带你搞懂阿里云上HTTPS配置、腾讯云实现全站 HTTPS 方案。
对开发者、架构师来说,只需要了解HTTPS的原理,并在需要实现HTTPS时,根据现有设计,在对应的组件上实现HTTPS配置,而这配置一般都是依赖云平台。
HTTPS缺点
HTTPS协议具有以下缺点:
(1) HTTPS协议多次握手,导致页面的加载时间延长近50%。
(2) HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗。
(3) 申请SSL证书需要钱,功能越强大的证书费用越高。
(4) SSL涉及到的安全算法会消耗 CPU 资源,对服务器资源消耗较大。
HTTP 与 HTTPS 的区别
HTTP 是超⽂本传输协议,信息是明⽂传输,存在安全⻛险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在TCP 和 HTTP ⽹络层之间加⼊了 SSL/TLS 安全协议,使得报⽂能够加密传输。
HTTP 连接建⽴相对简单, TCP 三次握⼿之后便可进⾏ HTTP 的报⽂传输。⽽ HTTPS 在 TCP 三次握⼿之后,还需进⾏ SSL/TLS 的握⼿过程,才可进⼊加密报⽂传输。
HTTP 的端⼝号是 80,HTTPS 的端⼝号是 443。
HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。
参考
https://blog.csdn.net/hguisu/article/details/8680808 HTTPS实现原理
https://zhuanlan.zhihu.com/p/466239718 面试必备:计算机网络常问的六十二个问题
https://zhuanlan.zhihu.com/p/27395037 HTTPS系列干货(一):HTTPS 原理详解
https://www.zhihu.com/tardis/zm/art/72616216 十分钟搞懂HTTP和HTTPS协议?
https://www.rfc-editor.org/rfc/rfc8446 TLS 1.3
https://developer.mozilla.org/zh-CN/docs/Web/Security/Transport_Layer_Security 传输层安全
https://www.cnblogs.com/huansky/p/13977181.html 深入浅出 HTTPS (详解版)
https://zhuanlan.zhihu.com/p/43789231 彻底搞懂HTTPS的加密原理
https://zhuanlan.zhihu.com/p/96494976 你知道,HTTPS用的是对称加密还是非对称加密?
https://www.jianshu.com/p/918d9f517749 https中的对称加密和非对称加密
https://zhuanlan.zhihu.com/p/162082184 对称还是非对称——https中到底使用了啥?
https://cloud.tencent.com/document/product/400/6813 腾讯云实现全站 HTTPS 方案
https://help.aliyun.com/practice_detail/444367 一文带你搞懂阿里云上HTTPS配置
相关文章:
HTTPS协议概述
HTTPS(Hypertext Transfer Protocol over Secure Socket Layer,基于安全套接字层的超文本传输协议),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,…...
jmeterbeanshell调用jsonpath获取对应值
1.jmeter 新建线程组、Java Request、BeanShell Assertion、View Results Tree 2、在BeanShell Assertion中贴入代码: import org.apache.jmeter.extractor.json.jsonpath.JSONManager; import java.util.List; JSONManager js new JSONManager(); String jsonStr…...
C++中实现雪花算法来在秒级以及毫秒及时间内生成唯一id
1、雪花算法原理 雪花算法(Snowflake Algorithm)是一种用于生成唯一ID的算法,通常用于分布式系统中,以确保生成的ID在整个分布式系统中具有唯一性。它的名称来源于雪花的形状,因为生成的ID通常是64位的整数࿰…...
OPTEE Gprof(GNU profile)
安全之安全(security)博客目录导读 OPTEE调试技术汇总 目录 一、序言 二、Gprof使用 三、Gprof实现 1、Call graph information 2、PC distribution over time 一、序言 本文描述了如何使用gprof对TA进行概要分析。 配置选项CFG_TA_GPROF_SUPPORTy使OP-TEE能够从在用户模…...
MySQL 事务的操作指南(事务篇 二)
基本操作 事务的提交方式:自动提交(autocommit1)和手动提交(autocommit0) 查询和修改事务提交方式: -- 查看事务提交方式(标识表示这是个系统变量) select autocommit ;-- 修改事务提交方式为自动提交 …...
Oracle 查询 SQL 语句
目录 1. Oracle 查询 SQL 语句1.1. 性能查询常用 SQL1.1.1. 查询最慢的 SQL1.1.2. 列出使用频率最高的 5 个查询1.1.3. 消耗磁盘读取最多的 sql top51.1.4. 找出需要大量缓冲读取(逻辑读)操作的查询1.1.5. 查询每天执行慢的 SQL1.1.6. 从 V$SQLAREA 中查询最占用资源的查询1.1.…...
gin 基本使用
gin 初体验 import ("net/http""github.com/gin-gonic/gin" )func main() {r : gin.Default()r.GET("/ping", func(c *gin.Context) {c.JSON(http.StatusOK, gin.H{"message": "pong",})})r.Run() }gin 路由接受一个 type …...
8月最新修正版风车IM即时聊天通讯源码+搭建教程
8月最新修正版风车IM即时聊天通讯源码搭建教程。风车 IM没啥好说的很多人在找,IM的天花板了,知道的在找的都知道它的价值,开版好像就要29999,后端加密已解,可自己再加密,可反编译出后端项目源码,已增加启动后端需要google auth双重验证,pc端 web端 wap端 android端 ios端 都有 …...
NSDT孪生场景编辑器系统介绍
一、产品背景 数字孪生的建设流程涉及建模、美术、程序、仿真等多种人才的协同作业,人力要求高,实施成本高,建设周期长。如何让小型团队甚至一个人就可以完成数字孪生的开发,是数字孪生工具链要解决的重要问题。考虑到数字孪生复杂…...
3D WEB轻量化引擎HOOPS助力3D测量应用蓬勃发展:效率、精度显著提升
在3D开发工具领域,Tech Soft 3D打造的HOOPS SDK已经崭露头角,成为了全球领先的3D领域开发工具提供商。HOOPS SDK包括四种不同的3D软件开发工具,已成为行业的翘楚。 其中,HOOPS Exchange以其CAD数据转换的能力脱颖而出,…...
【Orange Pi】Orange Pi5 Plus 安装记录
官网:Orange Pi - Orangepi 主控芯片:Rockchip RK3588(8nm LP制程)NPU:内嵌的 NPU 支持INT4/INT8/INT16/FP16混合运算,算力高达 6Top支持的操作系统: Orangepi OS(Droid)Orangepi O…...
NLP 项目:维基百科文章爬虫和分类 - 语料库阅读器
塞巴斯蒂安 一、说明 自然语言处理是机器学习和人工智能的一个迷人领域。这篇博客文章启动了一个具体的 NLP 项目,涉及使用维基百科文章进行聚类、分类和知识提取。灵感和一般方法源自《Applied Text Analysis with Python》一书。 在接下来的文章中,我将…...
查看吾托帮88.47的docker里的tomcat日志
步骤如下 (1)ssh (2)ssh root192.168.88.47 等待输入密码:fytest (3)pwd #注释:输出/root (4)docker exec -it wetoband_deploy /bin/bash #注释࿱…...
衷心 祝愿
达之云衷心祝愿您,中秋国庆双节快乐,阖家幸福!感谢您们一直以来对达之云的关注与支持。 双节来临之际,达之云发布全新产品——达之云CDP客户数据平台(Dazdata CDP),致力于为中小企业提供互联网营…...
表单中某一项点击添加和删除
<!-- 特殊表单 --><div v-for"(item, index) in form.fwzb" :key"indexfwzb" style"height: 102px"><el-form-item label"经度:" class"form-style":prop"fwzb. index .lon":rules&q…...
深信服安全GPT 2.0升级,开启安全运营“智能驾驶”旅程
9月22日,深信服对外展示安全GPT落地成果与2.0升级能力。来自各行业权威嘉宾代表:美的集团首席信息安全官(CISO)兼软件工程院院长、欧洲科学院院士(MAE)、IEEE Fellow、IET Fellow、ACM杰出科学家、AAIA Fel…...
【C++】STL之list深度剖析及模拟实现
目录 前言 一、list 的使用 1、构造函数 2、迭代器 3、增删查改 4、其他函数使用 二、list 的模拟实现 1、节点的创建 2、push_back 和 push_front 3、普通迭代器 4、const 迭代器 5、增删查改(insert、erase、pop_back、pop_front) 6、构造函数和析构函数 6.1、默认构造…...
解释器风格架构C# 代码
/*解释器风格架构是一种基于组件的设计架构,它将应用程序分解为一系列组件,每个组件负责处理特定的任务。这种架构有助于提高代码的可维护性和可扩展性。以下是如何使用C#实现解释器风格架构的步骤:定义组件:首先,定义…...
第七天:gec6818开发板QT和Ubuntu中QT安装连接sqlite3数据库驱动环境保姆教程
sqlite3数据库简介 帮助文档 SQL Programming 大多数关系型数的操作步骤:1)连接数据库 多数关系型数据库都是C/S模型 (Client/Server)sqlite3是一个本地的单文件关系型数据库,同样也有“连接”的过程 2)操作数据库 作为程序员&am…...
自制网页。
文章目录 注:代码中图片等素材均来自网络,侵删 20230920_213831 index.html <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-…...
MySQL单表查询和多表查询
一、单表查询 素材: 表名:worker-- 表中字段均为中文,比如 部门号 工资 职工号 参加工作等 CREATE TABLE worker (部门号 int(11) NOT NULL,职工号 int(11) NOT NULL,工作时间 date NOT NULL,工资 float(8,2) NOT NULL,政治面貌 varchar(10)…...
蓝桥等考Python组别四级006
第一部分:选择题 1、Python L4 (15分) 在Python中,符号“\n”代表( )。 换行空格退格注释正确答案:A 2、Python L4 (15分) 已知大写字母A的ASCII码值为…...
第3章-指标体系与数据可视化-3.2-描述性统计分析与绘图
目录 3.2.1 描述性统计进行数据探索 1. 变量度量类型与分布类型 度量类型 分布类型...
更直观地学习 Git 命令
前言 本文参考于 Learn Git Branching 这个有趣的 Git 学习网站。 在该网站,可以使用 show command 命令展示所有可用命令。 直接访问网站的sandbox。 本地篇 基础篇 git commit git commit将暂存区的修改提交到本地版本库并创建一个新的提交,新提…...
在 Vue 项目中添加字典翻译工具(二)
封装字段翻译组件,可以格式化字典、枚举、字段 优点: 使用简单,一次配置多次使用,缓存降低后端请求次数,扩展性强 没有缓存时造成单页面多次请求解决方法:axios添加缓存请求,防止多次请求&#…...
RDMA Shared Receive Queue(四)
参考知乎文章《RDMA之Shared Receive Queue》:https://zhuanlan.zhihu.com/p/279904125 SRQ SRQ全称为Shared Receive Queue,即共享接受队列。在QP中,SQ用于下发SEND/WRITE/READ等操作,而RQ只用于下发RECV操作,对于本…...
this关键字
作用:出现在成员方法,构造器中代表当前对象的地址,用于访问当前对象的成员变量、成员方法。this出现在 有参数构造器 中的用法 (this.成员变量 局部变量)this出现在 成员方法 中的用法 (this…...
缓存雪崩、缓存击穿、缓存穿透
缓存雪崩 当缓存中大量的键值对同时过期或者Redis宕机了,大量的请求就会直接打到数据库,这种现象就是缓存雪崩 应对策略 有四种,分别是“均匀设置过期时间”、“互斥锁”、“双key策略”、“设置逻辑过期时间,异步更新缓存” …...
Bigemap如何查看历史影像
工具 Bigemap gis office地图软件 BIGEMAP GIS Office-全能版 Bigemap APP_卫星地图APP_高清卫星地图APP 很多人都在寻找历史影像图,这块的需求是非常大,历史影像一般可以用于历史地貌的变迁分析,还原以前的生态场景,对范围面积…...
如何离线安装和使用pymysql操作mysql数据库
一、应用背景 在企业内部网络要使用python操作mysql数据库。然而,python未自带访问MySQL数据库的函数库pymysql,需要另外安装。网上有很多安装pymysql都需要互联网支持。本文主要阐述如何离线安装pymysql,并简要介绍pymysql如何进行mysql操作。 pymysq…...
14年网站开发经验/怎么自己弄一个网站
文章转自:http://www.kancloud.cn/digest/prandmethod/102845 贝叶斯分类器的分类原理是通过某对象的先验概率,利用贝叶斯公式计算出其后验概率,即该对象属于某一类的概率,选择具有最大后验概率的类作为该对象所属的类。也就是说…...
pdf viewer wordpress/网络市场营销
http://edu.51cto.com/lesson/id-10135.html http://edu.51cto.com/lecturer/user_id-140924.html转载于:https://www.cnblogs.com/mover/p/3406629.html...
wordpress 模版不能更新/爱站网影院
请问各位兄弟,在Linux中怎么看网卡是全双工工作还是半双工工作?mii-tool Linux:~ # mii-tooleth0: no linketh1: no autonegotiation, 100baseTx-HD, link okLinux:~ # Linux:~ # mii-tool -Fmii-tool: option requires an argument -- Fusage: mii-too…...
湖南城市建设技术学院官方网站/长沙线上引流公司
以前学习oc的时候写的一个团购的项目,现在学习swift,拿来用swift写一遍,也是连猜带蒙的,一点一点的往上凑。 今天主要是把主要的架子搭起来了。 主要有:UITabBarController,UINavigationController…...
帮人做网站要怎么赚钱/浙江短视频seo优化网站
当前有效matplotlib版本为:3.4.1。 figure函数概述 在pyplot模块中,figure函数用于创建新的图形,或激活已存在的图形。 函数的签名为matplotlib.pyplot.figure(numNone, figsizeNone, dpiNone, facecolorNone, edgecolorNone, frameonTrue…...
如何在百度做自己公司的网站/优化网站关键词优化
网络请求urllib库使用总结 目录网络请求urllib库使用总结1.概述2.Urllib库基本使用2.1.Urllib库快速上手1.完成一次简单的get请求2.read()函数介绍3.获取其他响应信息2.2.urlretrieve()函数下载数据1.urlretrieve()函数基本使用2.3.构建请求对象1.请求一个https网站2.攻破UA反爬…...