当前位置: 首页 > news >正文

网络编程5(HTTPS)

因为http协议的传输是明文的,就会引入了例如运营商劫持这样的安全问题,所以为了解决这样的问题就对http协议进行加密,加入了一个加密层,https就诞生了。

例如当我们在浏览器上下载一个软件,会通过运营商的路由器发送请求,获取到软件的下载地址,但是此时运营商服务器就会将我们获取到的地址进行篡改,这样的情况就是运营商劫持。因此HTTPS就会对请求数据进行加密,将明文加密得到密文,将密文解密得到明文,而加密解密过程中的一个关键数据就是密钥。

HTTPS的工作过程

既然要保证数据安全,就不能使用明文,而是经过加密后的密文,加密的方式有很多种其中主要的两种就是对称加密和非对称加密。

对称加密

对称加密其实就是通过一个相同的密钥,通过密钥进行加密,通过密钥进行解密,密钥就类似于一把钥匙,可以进行开锁也可以进行解锁。例如传输100这样的一个数据,通过密钥20,对数据加密得到2000,传输过程就传输2000,到了服务器就通过密钥进行解密得到100。由于黑客不知道密钥,就无法破解密文,这样的方法确实提高了较大安全性,但是暴露的问题也显而易见,就是多个服务器导致密钥的数量有很多,要维护起来非常麻烦,理想的方法就是在发送请求的时候同时发送密钥,但是此时的密钥不就以明文的形式进行传输了吗,黑客也就可以得到密钥了,那么之前的加密不就形同虚设了吗,所以对称加密就行不通了,此时就需要非对称加密。

引入非对称加密

非对称加密引入了两个密钥,公钥和私钥。

客户端先通过对称加密的密钥进行加密,然后通过公钥进行对对称加密密钥进行加密,然后通过明文发送给服务器,服务器会通过私钥进行解密,得到对称加密的密钥,再用这个密钥进行解密,最终得到明文。这样的黑客就算得到了公钥,没有私钥也就无法进行解密。这里不用非对称加密对数据进行加密是因为公钥解密太慢,只对密钥加密可以加快速度。但是又引入了新的问题,公钥要如何传输?公钥要如何判断是否是正确的?

中间人攻击

前面谈到了公钥的传输和安全性,是因为会出现“中间人攻击”的情况。先谈公钥传输,服务器会根据加密算法生成公钥1和密钥1,公钥1通过明文传输给客户端,之后就通过公钥加密的方式进行传输。但是黑客(中间人)就会自己生成一个公钥2和私钥2,在服务器返回公钥1的时候因为是明文的数据,中间人就可以将公钥1进行篡改成公钥2,这样客户端就会使用错误的公钥进行加密,发送给服务器,而中间人就可以将请求截获进行解密,再将错误的公钥改回来,发送给服务器,这样双方的通信就不知不觉中被获取篡改,所以又要想办法进行保证公钥的安全性,我们引入了证书。

引入证书

引入证书是为了解决公钥的安全性。证书其实就是一串字符串,服务端在使⽤HTTPS前,需要向CA机构(公证机构)申领⼀份数字证书,数字证书⾥含有证书申请者信息、公钥信息等。服务器把证书传输给浏览器,浏览器从证书⾥获取公钥就⾏了,证书就如⾝份证,证明服务端公钥的权威性。证书中包含了:证书发布机构,证书有效期,公钥,证书所有者,签名,数字签名等。客户端验证证书的合法性是依靠数字签名。

数字签名

数字签名的形成:公证机构在生成之后,会针对证书进行计算,得到一个校验和,公证机构会生成自己的非对称密钥通过公钥对校验和进行加密,这样就得到了数字签名。

数字签名的验证:客户端拿到证书后,需要拿同样的算法进行重新计算校验和(客户端自己算的),得到校验和M,同时根据证书生成的公钥进行解密,将解密得到的校验和2进行对比,如果二者相同,就代表着证书是科学的,如果不相同,客户端就会弹出提示页面。

问题一:黑客能否将公钥修改?

不能的,如果修改的话就会导致计算出的校验和出现不一样的情况。

问题二:黑客能否将证书给整个替换掉?
不能,这是因为证书中包含网站的的域名,而域名是黑客不能拿到使用的。

问题三:黑客能否将证书中的数字签名修改?

不能,数字签名被私钥加密需要公钥进行解密。

问题四:证书生成的公钥要如何发送给客户端?黑客能否进行修改公钥?

不能,公钥不是通过网络进行传输的,而是内置在操作系统中的。

http://www.lryc.cn/news/626639.html

相关文章:

  • 【考研408数据结构-08】 图论基础:存储结构与遍历算法
  • Linux的奇妙冒险——进程pcb第二讲
  • 云原生俱乐部-k8s知识点归纳(5)
  • SpringTask入门
  • 关于多个el-input的自动聚焦,每输入完一个el-input,自动聚焦到下一个
  • Rust并发编程:解锁高性能系统的密钥
  • 第12课_Rust项目实战
  • 批处理指令常见问题
  • 软考高级--系统架构设计师--案例分析真题解析
  • 【clion】cmake脚本1:调试脚本并构建Fargo项目win32版本
  • 无需驱动!单文件实现键盘按键禁用的技术方案
  • 使用Jmeter轻松实现AES加密测试
  • 01-Docker概述
  • 云计算学习100天-第26天
  • FreeRTOS入门知识(任务通知(二)以及定时器浅析)(七)
  • 2025年8月技术问答第2期
  • AI 与 OCR 识别:深度融合的智能信息提取技术
  • Cobbler 自动化部署服务介绍与部署指南
  • 微服务自动注册到ShenYu网关配置详解
  • 亚矩阵:跨境卖家 YouTube 私域矩阵搭建的高效解决方案
  • 使用acme.sh自动申请AC证书,并配置自动续期,而且解决华为云支持问题,永久免费自动续期!
  • 5.k8s控制器-Replicaset-Deployment、pod 反亲和性
  • 基于截止至 2025 年 6 月 4 日,在 App Store 上进行交易的设备数据统计,iOS/iPadOS 各版本在所有设备中所占比例详情
  • 宿主机与容器通过 rmw_cyclonedds_cpp中间件进行ros2结点之间的通讯的相关注意事项
  • Gin自定义Error中间件
  • synchronized锁,ReentrantLock 锁
  • 路由器NAT的类型测定
  • ios八股文 -- Objective-c
  • 机器翻译 (Machine Translation) 经典面试笔试50题(包括详细答案)
  • 游戏本不插电源适配器不卡设置教程