HTTP传输协议缺点

  • 之前几篇文章中详细讲解了TCP/IP协议栈中的几个协议,其中个就有对HTTP做了一个比较详细的讲解。HTTP是基于TCP进行传输的,其中传输的内容都是明文报文数据,如果我是一个黑客,我会想办法获取这个HTTP消息体,那我可以直接肉眼就能看出消息中的所有内容。这其实是存在很大风险的,如果HTTP消息被劫持,那么整个传输过程将存在风险,正因为存在以下三种风险,HTTP变成了一种不安全的协议

    • 第一,窃听风险(eavesdropping):第三方可以窃取通信内容
    • 第二,篡改风险(tampering):第三方可以修改通信内容
    • 第三,冒充风险(pretending):第三方可以冒充他人身份参与通信
加密协议SSL/TLS
  • 互联网中加密通信协议是通互联网共同发展的一门技术。

    • 1994年,NetScape公司设计了SSL协议(Secure Sockets Layer)的1.0版,但是未发布。
    • 1995年,NetScape公司发布SSL 2.0版,很快发现有严重漏洞。
    • 1996年,SSL 3.0版问世,得到大规模应用。
    • 1999年,互联网标准化组织ISOC接替NetScape公司,发布了SSL的升级版TLS 1.0版。
    • 2006年和2008年,TLS进行了两次升级,分别为TLS 1.1版和TLS 1.2版。最新的变动是2011年TLS 1.2的修订版。
  • 目前应用最广的是TLS1.0,接下来是SSL 3.0。但是,主流浏览器都已经实现了TLS1.2 的支持。
  • TLS1.0通常被标记为SSL3.1,TLS1.1为SSL3.2,TLS1.2为SSL3.3
更加安全的HTTPS
加密算法
  • 加密算法有历史悠久的发展,在一战二战中,都有广泛使用,所以密码学在社会发展种有广泛的用途

  • 第一对称加密:有流式,分组两种,加密和解密都是使用的同一个秘钥,例如DES,AES-GCM,ChaCha20-Poly1305等

  • 第二非对称加密:加密使用的秘钥和解密使用的秘钥是不同的,分别称为:公钥,私钥,公钥和算法都是公开的,私钥是保密的。非对称加密性能较低,但是安全性超强,由于加密特性,非对称加密算法能加密的数据长度也是有限的。例如:RSA,DSA,ECDSA,ECDHE

  • 第三哈希算法:将任意长度的信息转换为较为固定的长度的值,通常其长度要比信息小得多,且算法不可逆。例如:MD5,SHA-1,SHA-2,SHA-256

  • 第四数字签名:签名就是在信息的后面加上一段内容(信息经过hash后的值),经过hash后的值,可以证明信息没有被修改过。hash值一般都会加密后(也就是签名)再和信息一起发送,以保证这个hash值不被修改。

对HTTP消息体对称加密

  • 如上图中,展示了HTTP客户端发出的请求很容易被黑客接货,如果此时黑客冒充服务器,或者黑客窃取信息,则其可以放回任意信息给客户端,而且不被客户端察觉,所以我们经常会听到“劫持”这个词

  • 如上图是一个简单HTTPS经过TCP 的三次握手后,客户端与服务器建立连接,如果对后续双方传输的内容进行对称加密,那么理论上我们在本次传输中防止了内容的裸奔。缺点在于:

    • 但是由于对称加密使用的秘钥两端是一样的,要维持每一个客户端的秘钥不一致,整套加密才有意义(比如我是黑客伪造的客户端,如果秘钥一致,那么黑客还是能拿到秘钥,那没有任何意义)。但是遇到的问题是产生n个不同的秘钥,N=客户端数量,维护困难。
    • 另外,因为对称加密需要双方协商一致,一般提前约定,或者使用前传输秘钥,不管哪一种方式,很容易秘钥泄露。只要黑客拿到秘钥,那么所谓加密传输也就失去意义。
对HTTP消息体进行非对称加密
  • 如下图我们使用非对称加密
  • 上图中客户端用公钥对请求内容加密,服务器使用私钥对内容解密,反之亦然,但是上述过程也存在缺点:
    • 公钥是公开的(也就是黑客也会有公钥),所以第4 步私钥加密的信息如果被黑客接货,就可以使用公钥进行解密,获取其中的内容。
    • 非对称加密不适用数量太大的报文,大数量的报文导致加密效率降低
对称加密和非对称加密结合使用
  • 对称加密的优势:对称加密如果能保证秘钥不被黑客获取,那么他是安全的,并且对称加密的速度具有很大优势

  • 非对称加密优势:非对称加密请求发起时候尽管使用的是公钥加密,但是因为必须使用私钥解密的特点,因此能够保证消息体在想服务器发送过程中是安全的。

  • 两者结合做法:

    • 使用对称加密对消息体进行加密
    • 对称加密的算法和对称秘钥使用公钥加密后,在ClientHello时发送给服务器
    • 后续双方的内容进行对称加密
  • 如上图,我们之前说了秘钥交换在第一步进行,一下几个步骤意义如下:

    • 第3 步时候,客户端给服务器说:(之后回话用对称秘钥,这是对称算法XXX,和对称秘钥XXX),这段话用公钥进行加密,然后传给服务器。
    • 第4步时候,服务器收到信息后,用私钥解密,提取出对称加密算法和对称秘钥后,服务器回复:(好的)并用对称秘钥加密
    • 后续两者之间的信息传输就可以使用对称加密的方式了。
  • 使用这个方式时候,还有部分问题:

    • 如何将公钥给客户端
    • 客户端在获取一个公钥后,如何确认公钥是正确的服务端发出的而不是黑客伪装的

  • 如上图的情况第一步中公钥获取是存在风险的,而且直接在某个地方下载公钥也是不可靠的,因为黑客也可以在下载公钥的时候劫持了请求,并伪造公钥返回给客户端。后续的请求都会被黑客欺骗。

  • 解决方案是使用证书:

    • 证书是一个经证书授权中心数字签名的包含公开秘钥拥有者信息以及公开秘钥的文件,最简单的证书包含:公开秘钥,名称,证书授权中心数字签名。数字证书还有一个重要特征就是旨在特定时间段内有效
    • 数字帧数是一种权威性的电子文档,可以由权威工作的第三方机构,即CA(例如中国各地方的CA公司)中心签发的证书,也可以由企业级别CA系统进行签发。
  • 如下证书模式HTTPS:

  • 如上图,2步骤时候服务器发送了一个SSL证书给客户端,SSL证书中包含的具体内容有:

    • 证书发布机构CA
    • 证书有效期
    • 公钥
    • 证书所有者
    • 签名
  • 客户端在接受服务器发来的SSL证书会对证书进行校验,以浏览器为例说明如下:

    • 首先浏览器读取证书中的证书所有者,有效期信息进行校验
    • 浏览器开始查找操作系统中已内置的收信人的证书发布机构CA,与服务器发来的证书中的颁发者CA对比,用于校验证书是否为合法机构颁发
    • 如果找不到,浏览器报错,说明服务器发来的证书是不可信的。
    • 如果找到,浏览器会从操作系统中取出颁发者CA的公钥,然后对服务器发来的证书里面的签名进行解密
    • 浏览器使用相同的hash算法计算出服务器发来的证书的hash值,将这个计算的hash值域证书中签名做对比
    • 对比结果一致,则证明服务器发来的证书核发,没有被冒充。
    • 此时浏览器就可以读取证书中公钥,用于后续加密了。
  • 通过SSl证书的形式,即解决了公钥获取问题,又解决了黑客冒充问题,HTTPS加密过程也就此形成。所以对不HTTP,HTTPS传输更安全。

    • 所有信息都加密传播
    • 具有校验机制,一旦被篡改,通信双方立刻会发现
    • 配备身份证书,防止身份被冒充。

上一篇 网络编程-TCP/IP协议栈-UDP/HTTP协议

网络编程-HTTPS协议的实现原理相关推荐

  1. (转)C#网络编程(订立协议和发送文件) - Part.4

    源码下载:http://www.tracefact.net/SourceCode/Network-Part4.rar C#网络编程(订立协议和发送文件) - Part.4 文件传输 前面两篇文章所使用 ...

  2. windows网络编程——telnet协议

     1.windows网络编程--telnet协议 Telnet是最老的Internet应用,起源于1969年的ARPANET,名字是"电信网络协议(TelecommuicationNetwo ...

  3. 基于linux epoll网络编程细节处理丨epoll原理剖析

    epoll原理剖析以及三握四挥的处理 1. epoll原理详解 2. 连接的创建与断开 3. epoll如何连接细节问题 视频讲解如下,点击观看: 基于linux epoll网络编程细节处理丨epol ...

  4. 网络编程——常用协议解析

    ** 1.网络基础知识 ** 1.1> 什么是OSI模型 OSI 模型(Open System Interconnection model)是一个由国际标准化组织?提出的概念模型,试图?供一个使 ...

  5. Python30 网络编程通讯协议,1.学习网络编程的目的 2.什么是互联网 3.c/s结构 4.通讯基本要素 5.OSI模型...

    今日内容: 网络通讯协议 1.学习网络编程的目的 2.什么是互联网 3.c/s结构 4.通讯基本要素 5.OSI模型 思维路线 目的是要链接互联网中的其他计算机 物理层 用物理介质链接其他计算机 数据 ...

  6. 网络编程01-TCP协议(详)

    目录 一.网络编程学习大纲 二.回顾系统编程中进程的通信方式 1. 管道 2.信号 3.IPC对象 三.网络编程(套接字编程) 1.特点 2.协议 3.历史 四.网络应用程序设计模式 1.C/S模式 ...

  7. HTTP和HTTPS协议及工作原理分析

    HTTP协议概念 HTTP协议(HyperText Transfer Protocol,超文本传输协议,属于应用层)是用于从服务器传输超内容到本地浏览器的传送协议.是一个无状态的协议 想了解http, ...

  8. 1网络编程OSI协议

    今日内容: 网络编程:  软件开发结构   1,C/S 架构    s:  server 服务端    c:  client 客户端    客户端:就是指客户端的应用程序,什么时候需要服务就去享受自己 ...

  9. JAVA零学习之基础归纳(十八)--网络编程、协议、IP、基本API、URL、socket等

    [Java程序可以非常方便的访问互联网上的 HTTP服务.FTP服务等,并可以直接取得互联网上的远程资源,还可以向远程资源发送 GET.POST请求] 一.网络编程 1.1 网络概念和分类 所谓计算机 ...

最新文章

  1. 小红书做直播的背后,隐藏了什么秘密?
  2. 查看python安装路径以及pip安装的包
  3. Mocha and Red and Blue 模拟字符串
  4. 单位内部一个计算机系统属于,2012年计算机一级MsOffice第五十九套练习题及答案解析...
  5. 纯文字极简风格平面海报,PSD分层模板!
  6. Android开发笔记(九十七)图片的特效处理
  7. input file reader
  8. HTML5学习笔记(二十六):JavaScript的错误处理
  9. 0514JS练习:函数
  10. Hive数据倾斜入门
  11. 区位码、国标码、机内码的区别和内在机制
  12. springBoot搭配java小爬虫 获取百词斩单词释义
  13. c语言的get函数的用法,get函数的用法
  14. 如何将dwg转换为kml
  15. 上周热点回顾(7.4-7.10)
  16. Java中的冒泡排序,Comparator接口和Comparable接口的简单使用
  17. xiuno开发文档_大白 · TinyMCE编辑器v1.9_Xiuno Plugin_奇狐插件商店_奇狐网
  18. 信息化也需要雅俗包装
  19. 谈谈黎曼流形与视觉距离错觉问题
  20. MFC模拟 Windows 文件可视化系统

热门文章

  1. C和指针之部分理解和编码总结
  2. LeetCode之Remove Duplicates from Sorted List
  3. python中变量类型在程序中可以改变_详细解析Python当中的数据类型和变量
  4. python中匿名函数的作用_什么是Python中的匿名函数
  5. abd shell关闭所有程序_在后台服务器上运行程序
  6. python画樱桃小丸子_每天坚持画画|简笔画练习“樱桃小丸子”
  7. 第6章 C控制语句:循环
  8. 神奇的折纸艺术!无限翻转完全停不下来
  9. 这个偏僻的小山村竟出了12位博士28位硕士,高产“学霸”背后原因曝光......
  10. 历史上最怪异的23种飞行器,设计者脑子里都想什么了