HTTPS、SSL/TLS,HTTPS运行过程,RSA加密算法,AES加密算法

news2024/11/6 21:24:27
1、为什么网站要使用安全证书

我们所处的网络环境是复杂多样的,大致分为两类,一类是可信的网络服务商,比如直接连的电信运营商的网络,网线,4G,5G;另一类是不可信的网络,比如WIFI,局域网路由器,网吧,或者使用了网络代理等等,你的数据经过了一个不可控的网络中间节点,而它是可以看到你的所有数据信息,比如网吧网管品行不正,或者你在路边连的免费WIFI设备有恶意程序或中了木马,如果你输了什么用户名密码,如果是HTTP协议,那大概率是会被收集到,因为HTTP是明文传输的。

2、SSL(Secure Socket Layer 安全套接层)

是基于HTTPS下的一个协议加密层,最初是由网景公司(Netscape)研发,后被IETF(The Internet Engineering Task Force - 互联网工程任务组)标准化后写入(RFCRequest For Comments 请求注释),RFC里包含了很多互联网技术的规范!

起初是因为HTTP在传输数据时使用的是明文(虽然说POST提交的数据时放在报体里看不到的,但是还是可以通过抓包工具窃取到)是不安全的,为了解决这一隐患网景公司推出了SSL安全套接字协议层,SSL是介于HTTP和TCP之间的一个协议层,是基于HTTP标准并对TCP传输数据时进行加密,所以HPPTS是HTTP+SSL+TCP的简称。

3、TLS(Transport Layer Security 安全传输层协议)

由于HTTPS的推出受到了很多人的欢迎,在SSL更新到3.0时,IETF对SSL3.0进行了标准化,并添加了少数机制(但是几乎和SSL3.0无差异),标准化后的IETF更名为TLS1.0(Transport Layer Security 安全传输层协议),可以说TLS就是SSL的新版本3.1,并同时发布“RFC2246-TLS加密协议详解”,如果想更深层次的了解TLS的工作原理可以去RFC的官方网站:www.rfc-editor.org,搜索RFC2246即可找到RFC文档!

SSL 是指安全套接字层,简而言之,它是一项标准技术,可确保互联网连接安全,保护两个系统之间发送的任何敏感数据,防止网络犯罪分子读取和修改任何传输信息,包括个人资料。两个系统可能是指服务器和客户端(例如,浏览器和购物网站),或两个服务器之间(例如,含个人身份信息或工资单信息的应用程序)。

4、非对称加密

所谓非对称加密,是指一方使用密钥A加密,另一方却能使用密钥B解密。典型的就是公钥私钥系统。公钥加密的数据可以用私钥解密,私钥加密的数据可以用公钥解密,但是公钥加密的数据不能用公钥解密,私钥加密的数据不能用私钥解密。

公钥是给别人的,私钥是自己留着。比如,甲要给乙传输加密信息,那么甲要先拿到乙的公钥,使用此公钥对数据加密传输到乙,乙使用私钥来解密;同样的,如果乙要回复加密信息给甲,也要先拿到甲的公钥才行,因为如果乙使用的自己的私钥来加密,而此私钥对应的公钥是公开的,所以数据毫无保密可言。

常用的算法:RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)。

5、对称加密

使用同一个密钥,加上一对加密解密算法即可。

常用的算法:DES、3DES、AES、Blowfish、IDEA、RC5、RC6

6、HTTPS运行过程

在这里插入图片描述

6.1、服务端准备证书

网站运营方去认证机构申请下载证书,里面包含pem文件和key文件,其中pem文件内容就是CERTIFICATE证书,或者称为公钥;key文件内容就是RSA PRIVATE KEY密钥。在nginx中配置上证书的路径,同时将http的请求重定向到https,即将80端口的重定向到https。

当然,也可以自己使用 openssl 程序生成证书和密钥,通过浏览器访问网站的时候会提示“你的连接不是私密连接”,因为浏览器找不到证书的认证机构,但是还是可以继续访问网站。

如果在图中步骤1被中间人拦截了,他给客户端发了自己的公钥证书,那么客户端的请求就相对于被拦截了,所以,客户端一定要验证是否是权威机构办法的证书,已经验证完全通过。

6.2、客户端发起 HTTPS 请求

用户在浏览器里输入一个 https 网址,然后连接到 server 的 443 端口。

6.3、传送证书

这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间等等。

6.4、客户端解析证书

这部分工作是有客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。

地址栏中https左边点击按钮就能看到证书详情。

在这里插入图片描述

如果证书没有问题,那么就生成一个随机值,此随机数其实就是AES密钥,AES是对称加密算法,后面的数据通讯就是使用AES和这个密钥来加密解密的。

使用证书对该随机值进行加密。

6.5、客户端传送数据

客户端使用AES算法对要传递的数据进行加密得到密文,然后使用RSA公钥对AES密钥和密文进行加密。

6.6、服务端返回数据

服务端收到数据后使用RSA私钥解密,得到AES密钥和密文,然后使用AES算法解密数据,得到明文。

服务端将要返回的数据使用AES加密。

7、RSA加密算法

RSA是一种著名的非对称加密解密算法,包括公钥和私钥,公钥用来加密,私钥用来解密,私钥是保存在服务器上的。

RSA加密解密的速度较慢,因此不会用他来加密数据量大的场景。在https过程中也仅仅用来加密AES的密钥。

RSA签名:首先使用哈希算法,比如sha256,对消息字符串进行哈希运算得到长度较短且固定的字符串,使用RSA私钥对此字符串加密,得到签名字符串,将其附加在消息字符串的合适位置后,一并发送。接收方使用对应的公钥对签名字符串解密得到哈希值,同时对原始消息再计算哈希值,二者相比较,假如两者相符的话,则认为发信人持有正确的私钥,并且这个消息在传播路径上没有被篡改过。

签名是用来确定私钥的持有者身份以及判断内容是否被中间人篡改。比如在支付宝的支付签名中,就用到了两对公钥私钥,客户持有自己的私钥和支付宝的公钥,支付宝持有自己的私钥和客户的公钥,双方相互签名和验签。

8、RSA算法原理

RSA是一种非对称加密算法,是由Rivest、Shamir、Adleman三位数学家的缩写,RSA是目前最有影响力和最常用的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准。

今天只有短的RSA钥匙才可能被强力方式解破。到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。但在分布式计算和量子计算机理论日趋成熟的今天,RSA加密安全性受到了挑战和质疑。目前1024位和2048位的长度基本上够用了。

RSA算法基于一个十分简单的数论事实:将两个大质数(质数又称素数,就是除了1和本身以外,不会再有别的因数)相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为公钥。

8.1、公钥私钥生成过程
  • 随意选择两个大的质数p和q,p不等于q,计算 n = p * q,这两个数是通过伪随机数生成器生成的。伪随机数生成器不能直接生成质数,它是通过不断的重试得到的。

    n 转换成二进制后的长度,就是密钥长度,比如 1024bit, 2048bit。

  • m = (p-1) * (q-1)

  • 随机选择一个小的奇数 e,要求 e与 m 互质,并且 e 小于 m ,比如 e = 65537

  • 接下来计算 d :(d * e) % m = 1,这里 d 和 e 是模乘法逆元的关系。可以利用欧几里德算法来计算模乘法逆元。

  • (n,e)为公钥,(n,d)为私钥。

8.2、RSA加密解密

密文 = (明文^e) % n

明文 = (密文^d) % n

8.3、模幂运算

形如 c = (a^b) % p,其中 a, b, p 均为整形。

想要计算出结果,先要解决几个问题,首先a , b, p 可能是非常大的整数,会导致内存溢出,该如何声明。其次就是 a 与 b 的幂运算,如果参数太大也无法直接运算。

对于大整数,比如 9999...999,有100个9,可以使用数组来存储每一个数字,[9, 9, 9,...]

对于幂运算,可以拆解,a^1234 = a^1000 * a^200 * a^30 * a^4,实际会将指数部分表示成二进制的形式

对于模运算,可以根据公式,(a * b) % p = (a % p) * (b % p) % p,证明如下:

假设:
a = Ap +B;b = Cp + D

其中 A,B,C,D 是任意常数,那么:
ab = ACp^2 + ADp + BCk +BD

ab % p = BD % p

又因为:
a % p = B;b % p = D

所以:
(a % p)(b % p) % p = BD % p

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1115104.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

libpcap之零拷贝mmap

一、用户空间 在通过socket(AF_PACKET,…)创建fd后,进行接收队列的建立 //pcap-linux.c static int pcap_activate_linux(pcap_t *handle) { ...ret setup_mmapped(handle, &status); ... }1.1 设置默认ring bufer size static int setup_mmapped(pcap_t *h…

点云处理【六】(点云分割)

点云分割 第一章 点云数据采集 1. 点云分割 点云数据中包含目标物体,点云分割算法即将物体分割出来。 2 分割算法 2.1 RANSAC(随机采样一致性)方法 基于随机采样一致性的分割的步骤如下: 1.从一个样本集S中,随机抽取n个样本,…

下拉选择框监听el-option的方式

<el-select v-model"form.expenseType" placeholder"请选择费用类型" clearable filterable size"small"><el-option v-for"item in expenseNameList" :key"item.value" :label"item.label" :value"…

发现学习的新契机——广东开放大学电大搜题服务

广东开放大学一直以来致力于为广大学子提供优质的教育资源和学习支持&#xff0c;而最新推出的电大搜题微信公众号更进一步满足了学生们对于学习资料的需求。这一全新的学习辅助工具将为学子们带来便捷、高效的学习体验。 无论是传统的广播电视大学学生&#xff0c;还是广东开…

首届中国虚拟艺术巡展 NFT Showcase 圆满落幕!

由 Web3 营销先锋 Beep Crypto 精心策划&#xff0c;于 10 月 5 日至 10 月 17 日在广州潮流策展空间 YCC! 天宜隆重呈现。 本届展览以“虚拟时尚”为主题&#xff0c;融汇了众多的数字艺术展品&#xff0c;包括诸如 RTFKT X Nike、Gucci X 10KTF、Tiffany X Cryptopunks、Mee…

python二次开发Solidworks:读取立方体的高度

在SW中新建一个零件文档&#xff0c;建立一个立方体&#xff0c;长度和宽度自定义&#xff0c;高度100mm&#xff0c;下面通过python实现读取该立方体的高度&#xff1a; import win32com.client as win32 import pythoncomswApp win32.Dispatch(sldworks.application) swApp.…

使用telegram机器人发送通知

文章目录 背景1 创建机器人2 与机器人的会话3 调用API让机器人发送消息 背景 在训练深度学习模型时&#xff0c;除了粗略估计外&#xff0c;很难预测训练何时结束。此外&#xff0c;我们可能还想随时随地查看训练情况&#xff0c;如果每次都需要登录回服务器的话并不方便。因此…

RK3568笔记四:基于TensorFlow花卉图像分类部署

若该文为原创文章&#xff0c;转载请注明原文出处。 基于正点原子的ATK-DLRK3568部署测试。 花卉图像分类任务&#xff0c;使用使用 tf.keras.Sequential 模型&#xff0c;简单构建模型&#xff0c;然后转换成 RKNN 模型部署到ATK-DLRK3568板子上。 在 PC 使用 Windows 系统…

项目环境配置

一、后端环境搭建-前后端联调 1.1 nginx反向代理 1.2 nginx负载均衡配置 二、完善登录功能 处理密码明文&#xff0c;防止密码被别人获取破坏系统 MD5加密是单向的不可逆的 &#xff0c;不能由加密后的换算加密前的 //密码比对password DigestUtils.md5DigestAsHex ( pa…

二叉树,堆排序及TopK问题

要讲二叉树的概念&#xff0c;就要先讲树的概念。 树是什么呢&#xff1f; 树其实是一种储存数据的结构&#xff0c;因为他的结构倒过来和生活中的树很相似所以才被称之为树。 这是一颗多叉树&#xff0c;从最顶端的节点可以找到下边的几个节点&#xff0c;下边的节点又可以找…

Apollo:前端开发者的全栈探索之旅

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…

【C语言必知必会 | 第四篇】一文带你精通顺序结构

引言 C语言是一门面向过程的、抽象化的通用程序设计语言&#xff0c;广泛应用于底层开发。它在编程语言中具有举足轻重的地位。 此文为【C语言必知必会】系列第四篇&#xff0c;进行C语言顺序结构的专项练习&#xff0c;结合专题优质题目&#xff0c;带领读者从0开始&#xff0…

Halcon手眼标定

手眼标定&#xff08;参考&#xff1a;B站王佳琪老师) 这里说的手眼标定中的手指的是机械手或者电机运动的轴&#xff0c;眼表示摄像头 就是两个空间坐标系的转换&#xff0c;这个转换需要一个转换矩阵&#xff0c;那么转换矩阵需要根据两个坐标系的对应的九个点来通过vec_to…

如何用记事本制作一个简陋的小网页(3)——注册信息表

目录 前提须知&#xff1a; 一、表格建立之前&#xff1a; 二、表格的建立&#xff1a; 三、信息表的内容填充&#xff1a; 1.昵称 和 电话 &#xff1a; 2.密码&#xff1a; 3.性别&#xff1a; 4. 爱好&#xff1a; 5.民族&#xff1a; 6. 出生日期&#xff1a; 7.…

Python用selenium实现自动登录和下单的项目实战

本文主要介绍了Python用selenium实现自动登录和下单的项目实战&#xff0c;文中通过示例代码介绍的非常详细&#xff0c;对大家的学习或者工作具有一定的参考学习价值&#xff0c;需要的朋友们下面随着小编来一起学习学习吧− 前言 学python对selenium应该不陌生吧 Selenium…

什么是低代码开发平台?有什么优势?

目录 一、低代码平台演进 1. 低代码概念 2. 低代码衍生历程 二、为什么要用低代码&#xff1f; &#xff08;1&#xff09;降本提效&#xff0c;便捷开发 &#xff08;2&#xff09;降低开发门槛&#xff0c;扩大应用开发劳动力 &#xff08;3&#xff09;加快数字化转型建设 三…

“第四十五天” 数据结构基本概念

目前看的有关数据结构的课&#xff0c;估计这周就看完了&#xff0c;但感觉差很多&#xff0c;还是和c一样&#xff0c;这样过一下吧。但可能比较急&#xff0c;目前是打算争取寒假回家之前把四大件都先大致过一遍。 数据结构里面有很多新的定义和概念&#xff0c;学到现在&am…

054协同过滤算法的电影推荐系统

大家好✌&#xff01;我是CZ淡陌。一名专注以理论为基础实战为主的技术博主&#xff0c;将再这里为大家分享优质的实战项目&#xff0c;本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路…