HTTP和HTTPS的区别详解
1.HTTP的缺点
(点击题目解锁惊喜↑↑)
- 通信使用明文(不加密),内容可能会被窃听。
- 不验证通信方的身份,因此有可能遭遇伪装。
- 无法证明报文的完整性,所以有可能已遭篡改。
- 某些特定的web服务器和特定的web浏览器在实际应用中存在不足(脆弱性或安全漏网)。
1.1 通信使用明文可能会被窃听
由于HTTP本身不具备加密的功能,所以也无法做到对通信整体(使用HTTP协议通信的请求和相应的内容)进行加密,即HTTP报文使用明文(未经过加密的报文)方式发送。
TCP/IP是可能被窃听的网络。
通信时不加密是一个缺点是因为,按TCP/IP协议族的工作机制,通信内容在所有的通信线路上都有可能遭到窥视。窃听相同端上的通信只需要收集在互联网上流动的数据包(帧)。
就可以,对于收集来的数据包的解析工作,可以交给抓包或嗅探器工具。
加密处理可以防止被窃听。
加密的对象可以有:
1)通信加密
HTTP协议中没有加密机制,但可以通过SSL(Secure Socket Layer,,安全套接层)或TLS(Transport Layer Security,安全层传输协议)的组合使用,加密HTTP的通信内容。
与SSL组合使用的HTTP被称为HTTPS(HTTP Secure,超文本传输安全协议)。
2)内容的加密
由于HTTP协议中没有加密机制,那么就对HTTP协议传输的内容本身加密,即把HTTP报文里所含的内容进行加密处理。客户端需要对HTTP报文进行加密处理后再发送请求。
1.2 不验证通信方的身份就可能遭遇伪装
HTTP协议的实现本身非常简单,不论是谁发送过来的请求都会返回响应,因此不确认通信方,会存在以下各种隐患。
- 无法确定请求发送至目标的Web服务器是否是真实意图返回响应的那台服务器,有可能是已伪装的Web服务器。
- 无法确定响应返回到的客户端是否是按真实意图接受响应的那个客户端,有可能是已伪装的客户端。
- 无法确定正在通信的对方是否具备访问权限,因为某些Web服务器导航保存着重要的信息,只想要发给特定用户通信的权限。
- 无法判定请求时来自何方、出自谁手,即使是无意义的请求也会照单全收。
查明对方的证书:
可以使用SSL确定通信方,SSL不仅提供加密处理,而且还是用了一种被称为证书的手段,可用于确定方。证书由值得信赖的第三方机构颁发,另外,伪造证书从技术角度来说是异常困难的一件事,所以,只要能够确认通信方持有的证书,即可判断通信方的真实意图。
1.3 无法证明报文的完整性,可能已遭篡改
所谓完整性是指信息的准确度,也就意味着无法判断信息是否准确。
接收到的内容可能有误:
由于HTTP协议无法证明通信的报文完整性,因此,在请求或响应送出之后直到对方接受之前的这段时间内,即使请求或响应的内容遭到篡改,也没有办法获悉。
如何防止篡改:
虽然有使用HTTP协议确定报文完整性的方法,但事实上并不便捷、可靠,其中常用的是MD5和SHA-1等散列值校验的方法,以及用来确认文件的数字签名方法。
2.HTTPS介绍
HTTPS(安全套接字超文本传输协议),它是HTTP+加密+认证+完整性保护得来的HTTPS。
2.1 HTTPS是身披SSL外壳的HTTP
HTTPS是HTTP通信接口部分用SSL和TLS协议代替而已。通常是HTTP直接和TCP通信,当使用SSL时,则演变为先和SSL通信,再由SSL和TCP通信了。
在采用了SSL之后,HTTP就拥有了HTTPS的加密、证书和完整性保护这些功能。
SSL是独立与HTTP得协议,其他运行在应用层的SMTP和Telnet等协议均可配合SSL协议使用。
2.2 相互交换秘钥的公开秘钥加密技术
加密方法:SSL采用一种叫作公开秘钥加密的加密处理方式,近代的加密方法中加密算法是公开的,而秘钥是保密的,通过这种方式可以保持加密方法的安全性。
共享秘钥加密:加密和解密使用同一个秘钥的方式,在加密时必须要将秘钥也发给对方,在互联网转发秘钥时,如果通信被监听那么秘钥就可能会落入攻击者之手,同时也失去了加密的意义。
使用两把秘钥的公开秘钥加密:公开秘钥加密使用一堆非对称的秘钥,一把叫做私有秘钥,另一把叫做公开秘钥;发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有秘钥进行解密,利用这种方式,不需要发送用来解密的私有秘钥,也不必担心秘钥被攻击者窃听而盗走;但是他的处理速度相对共享秘钥来说很慢。
HTTPS采用混合加密方式:利用两种加密方式的优点,组合起来进行通信;在交换秘钥环节使用公开密钥加密方式,之后的建立通信交换报文阶段则使用共享加密方式。
2.3 证明公开秘钥正确性的证书
公开密钥加密方式无法证明秘钥本身就是货真价实的公开密钥;为了解决这个问题,可以使用由数字证书认证机构(CA)和其他相关机构颁发的公开秘钥证书。
故CA认证介入我们的HTTPS连接的过程如下:
- 服务器拥有自己的私钥与公钥。
- 服务器将公钥交给CA认证机构,请求给予一份数字证书。
- CA认证机构生成数字证书,并颁发给服务器。
- 服务器将带有公钥信息的数字证书发给客户端。
- 进入客户端生成对称密钥再进行对接的过程。
2.4 HTTPS的通信步骤
- 客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接。
- Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。
- 客户端的浏览器与Web服务器开始协商SSL/TLS连接的安全等级,也就是信息加密的等级。
- 客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。
- Web服务器利用自己的私钥解密出会话密钥。
- Web服务器利用会话密钥加密与客户端之间的通信。
2.5 HTTPS的优点
- 使用HTTPS协议可认证用户和服务器,确保数据发送到正确的客户机和服务器。
- HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比HTTP协议安全,可防止数据在传输过程中不被窃取、修改、确保数据的完整性。
- HTTPS是现行架构下最安全的解决方案,虽然不是绝对安全,但他大幅度增加了中间人攻击的成本。
2.6 HTTPS的缺点(对比优点)
- 慢,HTTPS未经任何优化的情况下要比HTTP慢几百毫秒以上,特别在移动端可能要慢500毫秒以上,关于HTTPS慢和如何优化已经是一个非常系统和复杂的话题。
- 贵,特别在计算性能和服务器成本方面。HTTPS为什么会增加服务器的成本?相信大家也都清楚HTTPS要额外计算,要频繁地做加密和解密操作,几乎每一个字节都需要做加解密,这就产生了服务器成本。
- 大量的计算.SSL的每一个字节都涉及到较为复杂的计算。即使是clientHello,也需要在握手完成时做校验。
- TLS协议的封装和解析。HTTPS所有数据都是按照TLS record格式进行封装和解析的。
- 协议的网络交互。从TLS的握手过程可以看出,即使不需要进行任何计算,TLS的握手也需要至少1个RTT(round trip time)以上的网络交互。RTT(Round-Trip Time): 往返时延。在计算机网络中它是一个重要的性能指标,表示从发送端发送数据开始,到发送端收到来自接收端的确认(接收端收到数据后便立即发送确认),总共经历的时延。
- HTTPS降低用户访问速度(需多次握手)。
- 网站改用 HTTPS 以后,由 HTTP 跳转到 HTTPS 的方式增加了用户访问耗时(多数网站采用 301、302 跳转)。
- HTTPS 涉及到的安全算法会消耗 CPU 资源,需要增加服务器资源(https 访问过程需要加解密)。
3.HTTPS和HTTP的区别
https协议需要到CA申请证书,一般免费整数较少,因而需要一定费用。
http是超文本传输协议,信息是明文传输,HTTPS则是具有安全性的SSL/TLS加密传输协议。
http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
http的连接很简单,是无状态的;https协议是由SSL/TLS+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
4.SSL和TLS
- SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。该协议由两层组成:SSL记录协议和SSL握手协议。
- TLS:(Transport Layer Security,传输层安全协议),用于两个应用程序之间提供保密性和数据完整性。该协议由两层组成:TLS记录协议和TLS握手协议。
4.1 SSL提供服务
- 认证用户和服务器,确保数据发送到正确的客户机和服务器。
- 加密数据以防止数据中途被窃取。
- 维护数据的完整性,确保数据在传输过程中不被改变。
4.2 工作流程
服务器认证阶段:
1)客户端向服务器发送一个开始信息“Hello”以便开始一个新的会话连接。
2)服务器根据客户的信息确定是否需要生成新的主密钥,如需要则服务器在响应客户的“Hello”信息时将包含生成主密钥所需的信息。
3)客户根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器。
4)服务器回复该主密钥,并返回给客户一个用主密钥认证的信息,以此让客户认证服务器。
用户认证阶段:在此之前,服务器已经通过了客户认证,这一阶段主要完成对客户的认证。经认证的服务器发送一个提问给客户,客户则返回(数字)签名后的提问和其公开密钥,从而向服务器提供认证。
4.3 SSL协议提供的安全通道有以下三个特性
- 机密性:SSL协议使用密钥加密通信数据。
- 可靠性:服务器和客户都会被认证,客户的认证是可选的。
- 完整性:SSL协议会对传送的数据进行完整性检查。
服务器证书(server certificates)是SSL数字证书的一种形式,意指通过提交数字证书来证明您的身份或表明您有权访问在线服务。再者简单来说,通过使用服务器证书可为不同站点提供身份鉴定并保证该站点拥有高强度加密安全。是组成Web服务器的SSL安全功能的唯一的数字标识。通过相互信任的第三方组织获得,并为用户提供验证您Web站点身份的手段。服务器证书包含详细的身份验证信息,如服务器内容附属的组织、颁发证书的组织以及称为公开密钥的唯一的身份验证文件。
5.如何优化HTTPS的速度
1)HSTS重定向技术:将http自动转换为https,减少301重定向。
2)TLS握手优化:在TLS握手完成前客户端就提前向服务器发送数据。
3)会话标识符:服务器记录下与某客户端的会话ID,下次连接客户端发ID过来就可以直接用之前的私钥交流了。
4)OSCP Stapling:服务器将带有 CA 机构签名的 OCSP 响应在握手时发给客户端,省的客户端再去CA查询。
5)完全前向加密PFS:使用更牛逼复杂的秘钥算法。
推荐阅读
>>>新手必备-Linux入门之云计算是什么
>>>红帽认证入门-Linux系统介绍及企业版本选型
>>>新手必备-Linux系统安装配置+Xshell远程连接
>>>Linux常用命令行合集之绝对路径和相对路径
>>>软连接与硬连接
运维界升职加薪必备的云计算技术,你学了吗?
学完高级运维云计算课程之后,你可以:
- 跨越90%企业的招聘硬门槛
- 增加70%就业机会
- 拿下BAT全国TOP100大厂敲门砖
- 体系化得到运维技术硬实力
- 技术大佬年薪可达30w+
HTTP和HTTPS的区别详解相关推荐
- HashTable和HashMap的区别详解
HashTable和HashMap的区别详解 一.HashMap简介 HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同 ...
- 关于numpy中eye和identity的区别详解
https://www.jb51.net/article/175386.htm np.identity(n, dtype=None) np.eye(N, M=None, k=0, dtype=< ...
- oracle join详解,inner join和left join之间的区别详解
前言 关于inner join 与 left join 之间的区别,以前以为自己搞懂了,今天从前端取参数的时候发现不是预想中的结果,才知道问题出在inner join 上了. 需求是从数据库查数据,在 ...
- 【Python】中小括号()、中括号[]、花括号{}的区别详解
Python3中小括号().中括号[].花括号{}的区别详解_python_ https://www.jb51.net/article/199741.htm 在Python语言中最常见的括号有三种,分 ...
- mysql int(3)与int(11)的区别详解
这篇文章主要介绍了mysql int(3)与int(11)的区别详解的相关资料,需要的朋友可以参考下 mysql int(3)与int(11)的区别 总结,int(M) zerofill,加上zero ...
- java之yield(),sleep(),wait()区别详解-备忘笔记
java之yield(),sleep(),wait()区别详解-备忘笔记 1.sleep() 使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁.也就是说如 ...
- linux中cat、more、less命令区别详解
linux中cat.more.less命令区别详解 转自:https://blog.csdn.net/xyw_blog/article/details/16861681 众所周知linux中命令cat ...
- 转 常量指针和指针常量的区别详解
传送门 常量指针和指针常量的区别详解 在C/C++中关键字const用来定义一个只读的变量或者对象,有如下优点 (1)便于类型检查,如函数的函数 fun(const int a) a的值不允许 ...
- JS 字符串编码函数(解决URL特殊字符传递问题):escape()、encodeURI()、encodeURIComponent()区别详解
JS 字符串编码函数(解决URL特殊字符传递问题):escape().encodeURI().encodeURIComponent()区别详解 参考文章: (1)JS 字符串编码函数(解决URL特殊字 ...
最新文章
- settimeout需要清除吗_钢结构抛丸机可以清理结构件上的焊渣吗?
- html设置标签上下居中,html 标签内部元素上下居中
- ASP.NET Core Web 资源打包与压缩
- 新俊飞六合一口红机完整源码
- Kotlin学习笔记29(完结篇) Flow part2 Flow的Buffer 中间操作符zip 打平 异常处理 Flow的完成 onCompletion的优势 onCompletion陷阱
- MongoDB的角色作用(2)
- 2015.4.28 今天开博客了
- Rust盒子小程序更新拍照查外挂功能,还能查Steam账户信息
- 一篇文章让你彻底了解算法的时间复杂度O(n)!!!
- 基于PageRank的复杂网络社区发现
- Visual Studio Code插件整理大全
- [ORACLE] 免安装的Oracle客户端 - Oracle Instant Client介绍与配置
- Win7系统64位下解决 {000209FF-0000-0000-C000-000000000046}
- Spark学习(二)Spark高可用集群搭建
- 今日头条搜索优化是什么,头条seo怎么做?
- 嵌入式系统硬件设计与实践(开发过程)
- 如何求两个信号的相位差
- 制作一个2048小游戏(大致思路步骤)
- 安川机器人实现激光追踪程序
- ABP VNext 集成JwtBearer(JWT),亲测