详解http和https
前言
大家好,我是小卷!
近几年,互联网发生着翻天覆地的变化,尤其是我们一直习以为常的HTTP协议,在逐渐的被HTTPS协议所取代,在浏览器、搜索引擎、CA机构、大型互联网企业的共同促进下,互联网迎来了“HTTPS加密时代”,HTTPS将在未来的几年内全面取代HTTP成为传输协议的主流。
读完本文,希望你能明白:
- HTTP通信存在什么问题
- HTTPS如何改进HTTP存在那些问题
- HTTPS工作原理是什么
1. 什么是 https?
HTTPS是在HTTP上建立SSL加密层,并对传输数据进行加密,是HTTP协议的安全版。现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。
HTTPS主要作用是:
(1)对数据进行加密,并建立一个信息安全通道,来保证传输过程中的数据安全;
(2)对网站服务器进行真实身份认证。
我们经常会在Web的登录页面和购物结算界面等使用HTTPS通信。使用HTTPS通信时,不再用http://
,而是改用https://
。另外,当浏览器访问HTTPS通信有效的Web网站时,浏览器的地址栏内会出现一个带锁的标记。对HTTPS的显示方式会因浏览器的不同而有所改变。
2. 为什么需要https?
在HTTP协议中有可能存在信息窃取或身份伪装等安全问题。使用HTTPS通信机制可以有效地防止这些问题,接下来,我们先来了解下
HTTP协议存在的哪些问题:
- 通信使用明文(不加密),内容可能被窃听
由于HTTP本身不具备加密的功能,所以也无法做到对通信整体(使用HTTP协议通信的请求和响应的内容)进行加密。即,HTTP报文使用明文(指未经过加密的报文)方式发送。
HTTP明文协议的缺陷是导致数据泄露、数据篡改、流量劫持、钓鱼攻击等安全问题的重要原因。HTTP协议无法加密数据,所有通信数据都在网络中明文“裸奔”。通过网络的嗅探设备及一些技术手段,就可还原HTTP报文内容。
- 无法证明报文的完整性,所以可能遭篡改
所谓完整性是指信息的准确度。若无法证明其完整性,通常也就意味着无法判断信息是否准确。由于HTTP协议无法证明通信的报文完整性,因此,在请求或响应送出之后直到对方接收之前的这段时间内,即使请求或响应的内容遭到篡改,也没有办法获悉。
换句话说,没有任何办法确认,发出的请求/响应和接收到的请求/响应是前后相同的。
- 不验证通信方的身份,因此有可能遭遇伪装
HTTP协议中的请求和响应不会对通信方进行确认。在HTTP协议通信时,由于不存在确认通信方的处理步骤,任何人都可以发起请求。另外,服务器只要接收到请求,不管对方是谁都会返回一个响应(但也仅限于发送端的IP地址和端口号没有被Web服务器设定限制访问的前提下)
HTTP协议无法验证通信方身份,任何人都可以伪造虚假服务器欺骗用户,实现“钓鱼欺诈”,用户无法察觉。
反观HTTPS协议,它比HTTP协议相比多了以下优势(下文会详细介绍):
-
数据隐私性: 内容经过对称加密,每个连接生成一个唯一的加密密钥
-
数据完整性: 内容传输经过完整性校验
-
身份认证: 第三方无法伪造服务端(客户端)身份
3.https如何解决http上述问题?
HTTPS并非是应用层的一种新协议。只是HTTP通信接口部分用SSL(Secure Socket Layer)和TLS(Transport Layer Security)协议代替而已。
通常,HTTP直接和TCP通信。当使用SSL时,则演变成先和SSL通信,再由SSL和TCP通信了。简言之,所谓HTTPS,其实就是身披SSL协议这层外壳的HTTP。
在采用SSL后,HTTP就拥有了HTTPS的加密、证书和完整性保护这些功能。也就是说HTTP加上加密处理和认证以及完整性保护后即是HTTPS。
HTTPS 协议的主要功能基本都依赖于 TLS/SSL 协议,TLS/SSL 的功能实现主要依赖于三类基本算法:散列函数 、对称加密和非对称加密,其利用非对称加密实现身份认证和密钥协商,对称加密算法采用协商的密钥对数据加密,基于散列函数验证信息的完整性。
(一)解决内容可能被窃听的问题——加密
方法1. 对称加密
对称加密算法也称为共享密钥加密,即加密和解密使用相同的一个秘钥。
常用的对称加密算法如 :DES , AES、IDEA
如果http的传输引入对称加密算法该会怎么样了?
首先假如server端制定了一个key即秘钥,key需要发送到client端去,然后客户端使用这个秘钥对数据进行加密,将加密的数据传输到服务端去,服务端再用这个key去解密发送过来的数据,得到解密前的数据。
对称加密引发的安全性问题
以上使用秘密进行加密了看着是安全了,但是有一个问题。客户端是有很多的,那服务端是不是需要制定很多个key了?这样显示是不现实的,存储这些key就是一个很大的工程,所以,一般只有一个key。这样的话,那所有的客户端获取到的key就是相同的了,那黑客也同样能作为客户端去获取这个key,获取到了key拦截到别人通信数据就能够进行解密了。就算key不一样,那么服务端一开始传输key到客户端时也有可能被黑客拦截,所以这是对称加密的安全缺陷
方法2. 非对称加密
非对称加密也叫共享密钥加密,其加解密秘钥不同(如RSA、DH)。其秘钥有两把,公钥和私钥。使用公钥加密私钥解密,或者私钥加密公钥解密,两把钥匙缺一不可。公钥是开放的,谁都可以获取
对称加密算法加解密使用相同的秘钥,其秘钥容易被窃取导致了安全缺陷。而非对称加密算法则解决了这个问题。如我们在HTTP中引入非对称加密,过程如下:服务端将自己的公钥发送给客户端,客户端拿到公钥对数据进行加密,接着发送给服务端,服务端使用自己的私钥对加密数据进行解密。就算黑客将公钥窃取,因为私钥在服务端那,黑客获取不到私钥所以无法对数据进行解密!只有服务端能对其解密,保证了数据的安全
非对称加密的安全性问题
非对称加密算法解决了对称加密算法中秘钥不安全的问题,客户端能向服务端安全的传输数据。但是服务端向客户端传送数据能保证安全吗?因为私钥放在服务器中,公钥放在客户端中,那传输数据只能使用自己的私钥进行加密 ,然后公钥进行解密,而公钥是公开的,那不是黑客也能解密了?!
方法3. 对称加密+非对称加密(HTTPS采用这种方式)
由上可知,对称加密由于key传输不安全易被窃取,非对称加密不能保证服务端向客服端传输数据的安全。两者都存在优缺点,所以我们这里可以将两者结合起来,取长补短
使用非对称加密算法将key传输给客户端,在这个过程中能保证key只有客户端知道。然后应用对称加密算法,使用获取的key对数据进行加密传输。因为key值安全了,所以数据、通信过程也安全了!
PS:对称加密算法比非对称加密算法效率高,因为其算法更简单
对称加密与非对称加密结合引发的安全性问题
将两者结合起来就安全了吗?实际上,在以上的第一步中存在安全缺陷,假如客户端在第一步向服务端索要公钥的时候遭到中间人攻击。hacker假装客户端又假装服务端,那么所有的数据都会先经过hacker。做到神不知鬼不觉
所以,以上的安全问题出在于,无法验证服务端公钥的合法性!
(二)解决报文可能遭篡改问题——数字签名
针对无法验证服务端公钥的合法性这个问题,这里引入CA,只有经过CA认证过的公钥才是合法的公钥,不然就认定为不安全。
证书颁发机构(CA, Certificate Authority) 即颁发数字证书的机构。是负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。
CA证书: 顾名思义,就是CA颁发的证书。其具有权威性,通过CA获取证书需要给钱。
PKI: PKI是 Public Key Infrastructure的简称,意思是公钥基础设施。公钥基础设施是提供公钥加密和数字签名服务的系统或平台,目的是为了管理密钥和证书。通过证书和秘钥来确认通讯双方是否可信任。CA是PKI的核心
证书的签发过程
- 服务方 S 向第三方机构CA提交公钥、组织信息、个人信息(域名)等信息并申请认证;
- CA 通过线上、线下等多种手段验证申请者提供信息的真实性,如组织是否存在、企业是否合法,是否拥有域名的所有权等;
- 如信息审核通过,CA 会向申请者签发认证文件-证书。
证书包含以下信息:申请者公钥、申请者的组织信息和个人信息、签发机构 CA 的信息、有效时间、证书序列号等信息的明文,同时包含一个签名;
签名的产生算法:首先,使用散列函数计算公开的明文信息的信息摘要,然后,采用 CA 的私钥对信息摘要进行加密,密文即签名;
此时客户端向服务器发送的第一步请求服务端不再是直接返回公钥,而是返回证书:
- 客户端 C 向服务器 S 发出请求时,S 返回证书文件;
- 客户端 C 读取证书中的相关的明文信息,采用相同的散列函数计算得到信息摘要,然后,利用对应 CA 的公钥(浏览器已经内置了CA的公钥,即信任。如果CA不被信任,则找不到对应 CA 的证书,证书也会被判定非法)解密签名数据,对比证书的信息摘要,如果一致,则可以确认证书的合法性,即公钥合法;
- 客户端然后验证证书相关的域名信息、有效时间等信息;
(三)https通信过程
回顾整个过程:
- 服务端将公钥信息发送给CA进行认证,CA对其信息验证并使用非对称加密算法私钥进行加密得到一个证书,然后发送给服务端
- 客服端向服务端请求,服务端返回证书
- 客户端使用CA的公钥(内置与浏览器)对其解密得到服务端公钥,成功则说明服务端公钥合法
- 成功获取到公钥,使用公钥加密传输对称加密的秘钥key,服务端使用私钥解密得到对称加密秘钥key
- 客户端与服务端用key对分别对数据进行加解密
这样一来,整个过程就相对于很安全!但是世界上没有绝对的安全。
4.http的工作原理
HTTP是一个基于TCP/IP通信协议来传递数据的协议,传输的数据类型为HTML 文件,、图片文件, 查询结果等。
HTTP协议一般用于B/S架构()。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。
我们以访问百度为例:
5.http特点
- http协议支持客户端/服务端模式,也是一种请求/响应模式的协议。
- 简单快速: 客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。
- 灵活: HTTP允许传输任意类型的数据对象。传输的类型由Content-Type加以标记。
- 无连接: 限制每次连接只处理一个请求。服务器处理完请求,并收到客户的应答后,即断开连接,但是却不利于客户端与服务器保持会话连接,为了弥补这种不足,产生了两项记录http状态的技术,一个叫做Cookie,一个叫做Session。
- 无状态: 无状态是指协议对于事务处理没有记忆,后续处理需要前面的信息,则必须重传。
6.https的工作原理
1.Client发起一个HTTPS(比如https://juejin.cn/user/4283353031252967)的请求,根据RFC2818的规定,Client知道需要连接Server的443(默认)端口。
2.Server把事先配置好的公钥证书(public key certificate)返回给客户端。
3.Client验证公钥证书:比如是否在有效期内,证书的用途是不是匹配Client请求的站点,是不是在CRL吊销列表里面,它的上一级证书是否有效,这是一个递归的过程,直到验证到根证书(操作系统内置的Root证书或者Client内置的Root证书)。如果验证通过则继续,不通过则显示警告信息。
4.Client使用伪随机数生成器生成加密所使用的对称密钥,然后用证书的公钥加密这个对称密钥,发给Server。
5.Server使用自己的私钥(private key)解密这个消息,得到对称密钥。至此,Client和Server双方都持有了相同的对称密钥。
6.Server使用对称密钥加密“明文内容A”,发送给Client。
7.Client使用对称密钥解密响应的密文,得到“明文内容A”。
8.Client再次发起HTTPS的请求,使用对称密钥加密请求的“明文内容B”,然后Server使用对称密钥解密密文,得到“明文内容B”。
7.https特点
基于HTTP协议,通过SSL或TLS提供加密处理数据、验证对方身份以及数据完整性保护
- 内容加密: 采用混合加密技术,中间者无法直接查看明文内容
- 验证身份: 通过证书认证客户端访问的是自己的服务器
- 保护数据完整性: 防止传输的内容被中间人冒充或者篡改
混合加密: 结合非对称加密和对称加密技术。客户端使用对称加密生成密钥对传输数据进行加密,然后使用非对称加密的公钥再对秘钥进行加密,所以网络上传输的数据是被秘钥加密的密文和用公钥加密后的秘密秘钥,因此即使被黑客截取,由于没有私钥,无法获取到加密明文的秘钥,便无法获取到明文数据。
数字摘要: 通过单向hash函数对原文进行哈希,将需加密的明文“摘要”成一串固定长度(如128bit)的密文,不同的明文摘要成的密文其结果总是不相同,同样的明文其摘要必定一致,并且即使知道了摘要也不能反推出明文。
数字签名技术: 数字签名建立在公钥加密体制基础上,是公钥加密技术的另一类应用。它把公钥加密技术和数字摘要结合起来,形成了实用的数字签名技术。
- 收方能够证实发送方的真实身份;
- 发送方事后不能否认所发送过的报文;
- 收方或非法者不能伪造、篡改报文。
8.http和https的区别
- HTTP 是明文传输协议,HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。
关于安全性,用最简单的比喻形容两者的关系就是卡车运货,HTTP下的运货车是敞篷的,货物都是暴露的。而https则是封闭集装箱车,安全性自然提升不少。
- HTTPS比HTTP更加安全,对搜索引擎更友好,利于SEO,谷歌、百度优先索引HTTPS网页;
- HTTPS需要用到SSL证书,而HTTP不用;
- HTTPS标准端口443,HTTP标准端口80;
- HTTPS基于传输层,HTTP基于应用层;
- HTTPS在浏览器显示绿色安全锁,HTTP没有显示;
9.https的优点
尽管HTTPS并非绝对安全,掌握根证书的机构、掌握加密算法的组织同样可以进行中间人形式的攻击,但HTTPS仍是现行架构下最安全的解决方案,主要有以下几个好处:
(1)使用HTTPS协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;
(2)HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性。
(3)HTTPS是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。
(4)谷歌曾在2014年8月份调整搜索引擎算法,并称“比起同等HTTP网站,采用HTTPS加密的网站在搜索结果中的排名将会更高”。
10.https的缺点
虽然说HTTPS有很大的优势,但其相对来说,还是存在不足之处的:
(1)HTTPS协议握手阶段比较费时,会使页面的加载时间延长近50%,增加10%到20%的耗电;
(2)HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗,甚至已有的安全措施也会因此而受到影响;
(3)SSL证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要一般不会用。
(4)SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗。
(5)HTTPS协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。最关键的,SSL证书的信用链体系并不安全,特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行。
11.为什么不所以网站都使用https
既然HTTPS那么安全可靠,那为何不所有的Web网站都使用HTTPS?
首先,很多人还是会觉得HTTPS实施有门槛,这个门槛在于需要权威CA颁发的SSL证书。从证书的选择、购买到部署,传统的模式下都会比较耗时耗力。
其次,HTTPS普遍认为性能消耗要大于HTTP,因为与纯文本通信相比,加密通信会消耗更多的CPU及内存资源。如果每次通信都加密,会消耗相当多的资源,平摊到一台计算机上时,能够处理的请求数量必定也会随之减少。但事实并非如此,用户可以通过性能优化、把证书部署在SLB或CDN,来解决此问题。举个实际的例子,“双十一”期间,全站HTTPS的淘宝、天猫依然保证了网站和移动端的访问、浏览、交易等操作的顺畅、平滑。通过测试发现,经过优化后的许多页面性能与HTTP持平甚至还有小幅提升,因此HTTPS经过优化之后其实并不慢。
除此之外,想要节约购买证书的开销也是原因之一。要进行HTTPS通信,证书是必不可少的。而使用的证书必须向认证机构(CA)购买。
最后是安全意识。相比国内,国外互联网行业的安全意识和技术应用相对成熟,HTTPS部署趋势是由社会、企业、政府共同去推动的。
最后是安全意识。相比国内,国外互联网行业的安全意识和技术应用相对成熟,HTTPS部署趋势是由社会、企业、政府共同去推动的。
12.http如何切换到https
如果需要将网站从http切换到https到底该如何实现呢?
这里需要将页面中所有的链接,例如js,css,图片等等链接都由http改为https。例如:http://www.baidu.com改为https😕/www.baidu.com
BTW,这里虽然将http切换为了https,还是建议保留http。所以我们在切换的时候可以做http和https的兼容,具体实现方式是,去掉页面链接中的http头部,这样可以自动匹配http头和https头。例如:将http://www.baidu.com改为//www.baidu.com。然后当用户从http的入口进入访问页面时,页面就是http,如果用户是从https的入口进入访问页面,页面即使https的。
总结:
小卷聊开发,一个专注于技术、面试,软件、偶尔发点生活的公众号,关注我,一起变强!!!
本文来自博客园,作者:SmallRoll(小卷),转载请注明原文链接:https://www.cnblogs.com/smallroll/p/17164638.html