HTTPS(超文本传输协议[安全])


1.HTTPS为什么叫安全的超文本传输协议

在HTTPS中,S是Security的意思,是安全的意思,而HTTP是超文本传输协议,这就不得不谈起HTTP在安全方面有什么劣势或者不足之处.

  1. HTTP通信是明文通信,通信过程可能会被监听
  2. 不验证通信对方的身份,有可能遭遇伪装
  3. 无法验证报文的完整性,或者报文遭到篡改

除此之外,HTTP本身也具备很多缺点,比如性能低下,即使是HTTP1.1,采用管线化(管道化)技术,但是在并发请求处理的情况下,性能依旧不够.


2.通信的加密

HTTP协议中没有加密机制,但是可以通过SSL或者TLS协议组合使用,加密HTTP的通信内容.与SSL组合的HTTP也被称为HTTPS,所以HTTPS并不是应用层的一个协议,而是基于SSL/TLS 和HTTP组合的一种统称.

什么是加密?

  • 现在将我们所有的文件都看成由字符构成的二进制文件,其中每个字符都被分配了相应的二进制编码,这也叫字符编码.定义了哪个编码对应的哪个字符,这种编码体系就叫做字符集,例如我们的ASCLL字符集,Unicode字符集,EUC字符集等,例如:现在有一个字符集,由三位字符组成,ABC.
字符 编码
A 65
B 66
C 67

转换成对应的十进制就是65 66 67,在转换成二进制,大家自行转换就行,这样展示出的数据就被称之为明文

如果是你,该如何去设计加密?

  • 正常的加密通常需要相对的解密,而这种加密的方式需要符合逻辑,对数据进行加密其实有很多种设计思路,例如,将数据的每个字符对应的十进制+2,就比如ABC进行+2加密之后就会摇身一变CDE,如果还需要解密,即可进行逆加密就能得到原始的加密数据了
  • 除此之位,二进制的位运算:异或,对于异或的结果是一个可逆的过程,因为他并不关心运算的结果,这种运算如果应用到二进制种的某一位进行运算之后,或者是某几位,加密的方式全权由自己决定.如果需要解密,只要知道加密的过程即可.
#include <stdio.h>
#include <string.h> void xor_encrypt_decrypt(char *data, char key) {
size_t length = strlen(data);
for (size_t i = 0; i < length; i++) {
data[i] = data[i] ^ key; // 对每个字符进行异或操作
}
} int main() {
char plaintext[] = "Hello, world!"; // 待加密的明文数据
char encryption_key = 0xAA; // 加密密钥,可以是任意字符 // 加密
xor_encrypt_decrypt(plaintext, encryption_key);
printf("加密后的数据: %s\n", plaintext); // 解密(使用同样的密钥进行解密)
xor_encrypt_decrypt(plaintext, encryption_key);
printf("解密后的数据: %s\n", plaintext); return 0;
}

这几种举例其实都是对称加密算法,因为加密和解密的方式是一样的,这种加密解密的方式我们称之为密钥,更多的是一种实现思想或者算法

然而,我们的HTTPS可不止不于此,他不仅采用了对称加密算法,还采用了非对称加密算法(密钥不同,加密的密钥和解密的密钥不同,因此会有公钥和私钥一说).

因为在互联网中,密钥也有被拿到的风险,这样的加密方式放在传输信息中并不安全,于是通过公钥和私钥的方式进行非对称加密.

公钥是可以公布给全世界,而私钥仅仅只有自身知道,至于互联网中常见的RSA非对称加密算法,本人才学疏浅,无法理解其原理,至于对称加密和非对称加密在HTTPS协议中哪些地方使用,需要了解HTTPS RSA握手过程才能理解.


3.信息摘要(Message Digest)和消息认证码(Message Authentication Code)

他两是什么:验证数据完整性的一把钥匙,不过两者存在一定的区别,我们先来理解信息摘要

  1. 信息摘要是:通过哈希函数对数据进行计算得到的固定长度的字符串,通常称为哈希值或摘要值。

    • 常见的哈希函数包括MD5、SHA-1、SHA-256等。
    • 信息摘要用于验证数据的完整性,即检查数据在传输过程中是否发生了任何更改。
    • 信息摘要是单向的,无法从摘要值还原出原始数据。
    • 信息摘要广泛应用于文件完整性检查、数字签名等领域

    其实很好理解,同一份数据,如果都用相同的哈希函数进行运算,得到的哈希值是相同的,而数据如果不完整或者发生变更,哈希值便会立刻发生改变,至于双方如何知道对方使用的何种哈希函数?

    协商或者协议

  2. 消息认证码:一种使用密钥对数据进行加密和校验的技术,它使用对称密钥算法,将密钥与数据进行运算生成一个固定长度的认证码

    • 常见的消息认证码算法包括HMAC、CMAC、Poly1305等。
    • 消息认证码不仅验证数据的完整性,还提供了身份验证和防止篡改的功能。
  • 总结:两者的不同

    乍一看,好像两种方式都能保证数据的完整性,只不过使用的方式和最后比对的结果的名称不同罢了,但是,消息认证码使用的是对称密钥进行运算的,这一点非常非常重要,因为对称密钥只有发送方和接收方才知道,其余人并不知道这个对称密钥.所以这就保障了消息认证码还可以确保身份.

    但是我猜到应该会有人问对称密钥为什么不会被他人知道?我们前面提及在HTTPS协议中,是使用的混合加密的方式,其实这种加密方式非常巧妙,因为通过对称加密的方式既然有可能被人知道,那就需要通过非对称加密的方式,我们在HTTPS后面的大致过程中了解.

4.数字签名

既然已经有了相应的加密算法进行加密解密,也有了相应的标识去保证数据的完整性和身份的认证,那么为什么还需要数字签名去保证身份的认证???

使用的地方不同,在建立阶段通常需要数字签名去验证服务器的身份,而数据传输过程中则需要去通过消息认证码去验证.

数字签名验证数字证书的完整性和真实性,以确保服务器的身份,而数字证书是由CA机构颁发的,一般服务端需要申请HTTPS服务时,就会去申请所谓的数字证书,数字证书包含着服务端的信息以及对应的公钥.其实理解这一个过程十分不易,需要用图解的形式去了解.

  • 于此,服务端就获得了数字证书,数字证书中包含着公钥和私钥,服务端会根据私钥生成相应的数字签名,而这个数字签名则用来验证数字证书

  • 这就是数字签名的生成过程,其中利用到了信息摘要,这就是为什么要了解信息摘要的原因.至于客户端是如何通过数字签名是验证数字证书的完整性,身份的可靠性,其实也很好理解.

一方面服务端通过数字私钥对信息摘要进行加密运算得到数字签名,而客户端通过公钥对数字签名在反手得到信息摘要,但如果需要比对真正的信息摘要,只需要拿数字证书再进行哈希运算得到这个信息摘要,进行匹配就行,是不是很惊奇,明明两种运算的方式不同,却依然能够获得相同的信息摘要.这下便可以彻底知道数字证书和数字签名的真正关系了

因此,无论是数字证书的公钥被恶意篡改,还是签名被更改,都会导致信息摘要无法匹配,导致身份无法识别,当然这个数字证书的这个过程其实是在建立连接的过程中进行的,在实际的通信交换数据的过程中常常用到消息认证码来确保数据的可靠性.


5.HTTPS的大致过程

当你输入一个HTTPS地址并访问时,以下是大致的步骤和过程:

  1. 客户端发送HTTPS请求:你的浏览器向服务器发送一个HTTPS请求,请求访问指定的网址(例如https://www.example.com)。
  2. 服务器证书:服务器接收到请求后,会将自己的数字证书发送给客户端。该证书包含服务器的公钥、证书颁发机构的签名以及其他相关信息。
  3. 客户端验证证书:浏览器会验证服务器证书的有效性,包括检查证书的合法性、过期时间、证书链的完整性等。如果证书验证失败或存在问题,浏览器会显示警告信息。
  4. 密钥交换:如果服务器的证书验证通过,客户端会生成一个随机的对称密钥,称为会话密钥。然后,客户端使用服务器的公钥加密该会话密钥,并将其发送给服务器。
  5. 密钥解密:服务器接收到加密的会话密钥后,使用自己的私钥进行解密,得到原始的会话密钥。
  6. 安全通信建立:客户端和服务器现在都有了相同的会话密钥,用于加密和解密通信内容。双方可以使用对称密钥进行加密和消息认证码计算,以确保通信的机密性和完整性。
  7. 数据传输:客户端和服务器使用会话密钥对HTTP请求和响应进行加密和解密。数据在传输过程中使用加密算法进行保护,防止被中间人窃听或篡改。
  8. 连接关闭:当通信结束时,客户端和服务器可以选择关闭连接。
  • 其中的第二步和第三步我们以及在上文讲过了,在客户端验证完数字证书的合法性后,便会实现密钥交换,而这个对称性密钥就是这个时候生成的,也被称为会话密钥,在被进行公钥加密之后,也只有服务端的私钥才能解密,这就保证了为什么对称性密钥一定不会被拿到的缘故,解释了前文的对称性密钥在数据传输可靠的缘故,毕竟进行数据传输的过程中,使用简单的加密解密方式通常都是时间短,效率高的.不得不说,每一种密钥的方式都恰到好处地使用到了.

以上就是HTTPS为什么安全可靠的原因了,如果需要了解TLS/SSL握手的详细内容可以查阅相关资料。

HTTPS相比HTTP为什么安全的更多相关文章

  1. 打造安全的App!iOS安全系列之 HTTPS

    如何打造一个安全的App?这是每一个移动开发者必须面对的问题.在移动App开发领域,开发工程师对于安全方面的考虑普遍比较欠缺,而由于iOS平台的封闭性,遭遇到的安全问题相比于Android来说要少得多 ...

  2. iOS安全系列之一:HTTPS (轉載)

    如何打造一个安全的App?这是每一个移动开发者必须面对的问题.在移动App开发领域,开发工程师对于安全方面的考虑普遍比较欠缺,而由于iOS平台的封闭性,遭遇到的安全问题相比于Android来说要少得多 ...

  3. HTTPS系列干货(一):HTTPS 原理详解

    HTTPS(全称:HyperText Transfer Protocol over Secure Socket Layer),其实 HTTPS 并不是一个新鲜协议,Google 很早就开始启用了,初衷 ...

  4. 案例分析——BAT业务https化经历

         一.前言      通常的http访问会遭到中间人攻击.网络嗅探等普通用户感知不到的恶意行为,这些行为会篡改用户浏览页面引导用户访问非法网站.抓取用户的上网行为以及个人信息.严重的会造成用户 ...

  5. iOS安全系列之一:HTTPS

    如何打造一个安全的App?这是每一个移动开发者必须面对的问题.在移动App开发领域,开发工程师对于安全方面的考虑普遍比较欠缺,而由于iOS平台的封闭性,遭遇到的安全问题相比于Android来说要少得多 ...

  6. HTTPS 基本流程 转载 https://zhuanlan.zhihu.com/p/27395037

    协议 1.HTTP 协议(HyperText Transfer Protocol,超文本传输协议):是客户端浏览器或其他程序与Web服务器之间的应用层通信协议 . 2.HTTPS 协议(HyperTe ...

  7. 加密方法与HTTPS 原理详解

    一:加密方法: 1,对称加密 AES,3DES,DES等,适合做大量数据或数据文件的加解密. 2,非对称加密 如RSA,Rabin.公钥加密,私钥解密.对大数据量进行加解密时性能较低. 二:https ...

  8. HTTPS原理,以及加密、解密的原理。

    https://blog.csdn.net/Yang_yangyang/article/details/79702583 摘要:本文用图文的形式一步步还原HTTPS的设计过程,进而深入了解原理. A在 ...

  9. nginx配置https并强制http自动跳转到https

    关于使用HTTPS/SSL的必要性,可以自行baidu,援引的说法,EFF(Electronic Frontier Foundation),全球过半流量采用https. https://www.osc ...

  10. [转帖]HTTPS系列干货(一):HTTPS 原理详解

    HTTPS系列干货(一):HTTPS 原理详解 https://tech.upyun.com/article/192/HTTPS%E7%B3%BB%E5%88%97%E5%B9%B2%E8%B4%A7 ...

随机推荐

  1. Adobe 构建 IDP 之路的经验与教训

    在过去的25年多时间里,我创建了软件组件和分布式框架,建立并领导了相关团队.近几年我致力于推动 Adobe 服务开发.部署和管理系统的开发人员生产力. 抽象陷阱 在云时代早期,Adobe 的每个团队都 ...

  2. .Net7基础类型的优化和循环克隆优化

    前言 .Net7里面对于基础类型的优化,是必不可少的.因为这些基础类型基本上都会经常用到,本篇除了基础类型的优化介绍之外,还有一个循环克隆的优化特性,也一并看下. 概括 1.基础类型优化 基础类型的优 ...

  3. 大语言模型的开发利器langchain

    目录 简介 什么是langchain langchain的安装 langchain快速使用 构建应用 聊天模式 Prompt的模板 Chains Agents Memory 总结 简介 最近随着cha ...

  4. JS逆向实战20——某头条jsvm逆向

    声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 网站 目标网站:aHR0c ...

  5. AWVS——自动化检测发现漏洞

    AWVS简介 *AWVS作为一个工具,不可能把所有漏洞扫描出来,仅仅是作为一个渗透网站时的辅助工具 自动化Web漏洞扫描工具(基于漏洞匹配方法,通过网络爬虫测试网站安全) AWVS通过SQL注入攻击. ...

  6. 基于JavaFX的扫雷游戏实现(三)——交互逻辑

      相信阅读过上期文章,动手能力强的朋友们已经自己跑出来界面了.所以这期我要讲的是交互部分,也就是对于鼠标点击事件的响应,包括计时计数对点击事件以及一些状态量的影响.   回忆下第一期介绍的扫雷规则和 ...

  7. iOS 百度导航没有语音播报

    1.百度地图没有语音播报 可以尝试如下方式: 1.tts确认相关key正确,可以放入官方demo测试 2.setting中 Product Name 尝试设置成英文,在info.plist设置Bund ...

  8. CF1728A Colored Balls: Revisited题解

    去我的Blog观看 修改时间:2022/9/11修改了格式与标点 修改时间:2022/9/13修改了个别不严谨的语句 题目大意 有 \(n\) 种颜色的球,颜色为 \(i\) 的球为 \(cnt_i\ ...

  9. 基于GPT搭建私有知识库聊天机器人(三)向量数据训练

    在前面的文章中,我们介绍了实现原理和基本环境安装.本文将重点介绍数据训练的流程,以及如何加载.切割.训练数据,并使用向量数据库Milvus进行数据存储. 1. 数据训练依赖于向量数据库 在本文中,我们 ...

  10. 揭开 RocketMQ 事务消息的神秘面纱

    事务消息是 RocketMQ 的高级特性之一,相信很多同学都对于其实现机制很好奇. 这篇文章,笔者会从应用场景.功能原理.实战例子.实现细节四个模块慢慢为你揭开事务消息的神秘面纱. 1 应用场景 以电 ...