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

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 +BDab % p = BD % p又因为:
a % p = B;b % p = D所以:
(a % p)(b % p) % p = BD % p

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

会声会影2024有哪些新功能?好不好用

比如会声会影视频编辑软件,既加入光影、动态特效的滤镜效果,也提供了与色彩调整相关的LUT配置文件滤镜,可选择性大,运用起来更显灵活。会声会影在用户的陪伴下走过20余载,经过上百个版本的优化迭代,已将操作…

ubuntu20.04 nvidia显卡驱动掉了,变成开源驱动,在软件与更新里选择专有驱动,下载出错,调整ubuntu镜像源之后成功修复

驱动配置好,环境隔了一段时间,打开Ubuntu发现装好的驱动又掉了,软件与更新 那里,附加驱动,显示开源驱动,命令行输入 nvidia-smi 命令查找不到驱动。 点击上面的 nvidia-driver-470(专有&#x…

Maven 生命周期clean default size含义

clean 负责清理工作,清理上一次项目构建产生的一些文件,如编译后的字节码文件,打包后的jar包文件 default 整一个项目构建的核心工作,如编译,测试,打包,安装,部署等等 size 生成报告…

【Mysql】B+树索引的使用(七)

前言 每个索引都对应一棵 B 树, B 树分为多层,最下边一层是叶子节点,其余的是内节点(非叶子节点)。所有用户记录都存储在 B 树的叶子节点,所有目录项记录都存储在内节点。 InnoDB 存储引擎会自动为主键&am…

实现Linux下Word转PDF、Java调用命令方式

使用 LibreOffice 实现 Word 转 PDF 和 Java 调用命令 1、 安装 LibreOffice 外网安装 # 一键安装 yum install -y libreoffice # 验证版本 libreoffice --version # Warning: -version is deprecated. Use --version instead. # LibreOffice 7.5.6.2 f654817fb68d6d4600d7…

数据仓库扫盲系列(1):数据仓库诞生原因、基本特点、和数据库的区别

数据仓库的诞生原因 随着互联网的普及,信息技术已经深入到各行各业,并逐步融入到企业的日常运营中。然而,当前企业在信息化建设过程中遇到了一些困境与挑战。 1、历史数据积存。 过去企业的业务系统往往是在较长时间内建设的,很…

MODBUS-TCP转MODBUS-RTU通信应用(S7-1200和串口服务器通信)

在学习本博客之前,大家需要熟悉MODBUS-TCP和MODBUS-RTU通信,这2个通信的编程应用,大家可以查看下面文章链接: MODBUS-RTU通信 MODBUS-RTU通信协议功能码+数据帧解读(博途PLC梯形图代码)-CSDN博客MODBUS通信详细代码编写,请查看下面相关链接,这篇博客主要和大家介绍MODB…

Rust逆向学习 (1)

文章目录 Hello, Rust Reverse0x01. main函数定位0x02. main函数分析line 1line 2line 3line 4~9 0x03. IDA反汇编0x04. 总结 近年来,Rust语言的热度越来越高,很多人都对Rust优雅的代码和优秀的安全性赞不绝口。对于开发是如此,对于CTF也是如…

Easyx趣味编程7,鼠标消息读取及音频播放

hello大家好,这里是dark flame master,今天给大家带来Easyx图形库最后一节功能实现的介绍,前边介绍了绘制各种图形及键盘交互,文字,图片等操作,今天就可以使写出的程序更加生动且容易操控。一起学习吧&…

【CSS】使用 CSS 实现一个宽高自适应的正方形

1. 利用 padding 或 vw <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><metaname"viewport"content"widthdevice-width, initial-scale1.0"><title>Document</title><st…

YOLOv5改进实战 | GSConv + SlimNeck双剑合璧,进一步提升YOLO!

前言 轻量化网络设计是一种针对移动设备等资源受限环境的深度学习模型设计方法。下面是一些常见的轻量化网络设计方法: 网络剪枝:移除神经网络中冗余的连接和参数,以达到模型压缩和加速的目的。分组卷积:将卷积操作分解为若干个较小的卷积操作,并将它们分别作用于输入的不…

【驱动开发】控制stm32mp157a开发板三盏灯的亮灭

编写应用程序控制三盏灯的亮灭 head.h&#xff1a; #ifndef __HEAD_H__ #define __HEAD_H__typedef struct {unsigned int MODER;unsigned int OTYPER;unsigned int OSPEEDR;unsigned int PUPDR;unsigned int IDR;unsigned int ODR; }gpio_t;//LED灯的寄存器地址 #define …

制造企业如何做好MES管理系统需求分析

随着制造业的不断发展&#xff0c;制造企业对于生产过程的管理需求日益增长。为了提高生产效率和质量&#xff0c;越来越多的制造企业开始关注MES生产管理系统的需求分析。本文将从以下几个方面探讨制造企业如何做好MES管理系统需求分析。 一、明确需求 在进行MES管理系统需求…

利用爬虫采集音频信息完整代码示例

以下是一个使用WWW::RobotRules和duoip.cn/get_proxy的Perl下载器程序&#xff1a; #!/usr/bin/perluse strict; use warnings; use WWW::RobotRules; use LWP::UserAgent; use HTTP::Request; use HTTP::Response;# 创建一个UserAgent对象 my $ua LWP::UserAgent->new();#…

vue3里面vant组件的标签页使用?

一、绑一个v-model事件 二、让activeName的初始为0也就是默认是显示第一个标签页的下标 三、给标签页下面的东西进行一个判断 想让哪个优先显示就把哪个判断作为初始值存入

npm 执行命令时报错npm ERR! code ERESOLVE npm ERR! ERESOLVE could not resolve

npm ERR! code ERESOLVE npm ERR! ERESOLVE could not resolve npm ERR! npm ERR! While resolving: vue-office/docx1.3.0 npm ERR! Found: vue-demi0.14.6 npm ERR! node_modules/vue-demi npm ERR! vue-demi“^0.14.6” from the root project npm ERR! vue-demi“*” from …

《广西开放大学电大搜题微信公众号——探索学习的新途径》

随着社会的发展&#xff0c;教育无疑成为了人们的基本需求之一。然而&#xff0c;对于许多忙碌的职场人士来说&#xff0c;时间和地点的限制使得他们无法像传统学生那样参加常规的大学教育。好在有着广西开放大学这样的学府&#xff0c;为那些繁忙而渴望知识更新的人们提供了学…

2017年高热度编程语言简介

世上语言千千万&#xff0c;我却独爱这一种!”这句话用来形容程序员和编程语言之间的爱恨情仇实在是再精准不过了。根据GitHub 2016年的开源报告&#xff0c;其上所有开源项目共包含了316种编程语言&#xff0c;这是一个什么概念呢?举个例子来说&#xff0c;世界上共有226个国…

LLDB 三种输出方式 对比及原理探索

前言 当我们的项目过大时,就会使我们项目的编译耗时过长,如何在项目运行时进项代码调试,熟练使用LLDB就可以解决这个难题,大幅度提高我们的开发效率。 什么是 LLDB? LLDB是英文Low Lever Debug的缩写,是XCode内置的为我们开发者提供的调试工具,它与LLVM编译器一起,存…

异或运算.

相同为0&#xff0c;不同为1。 1 ^ 10 0 ^ 00 1 ^ 01 0 ^ 11性质&#xff1a; 0 ^ N N N ^ N 0交换、结合 a ^ b b ^ a&#xff1b; (a ^ b) ^ c a ^ (b ^ c)&#xff1b; 因此异或全部的元素的结果就是那个只出现1次的元素。 实现两个值的交换&#xff0c;而不必使…