你是否了解HTTPS的加密原理?(面试常问)
Posted 梦梦~~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了你是否了解HTTPS的加密原理?(面试常问)相关的知识,希望对你有一定的参考价值。
梦梦前段时间面试,以及工作之后负责的模块多多少少都会涉及到一些网络协议的知识,今天就抽出时间整理了其中两个常见的协议:HTTP和HTTPS的区别。
什么是网络协议?
网络协议:是计算机网络中为了进行数据交换而指定的规则,收发双发必须采用同一套协议才能进行传输。也是规定了信息传输时必须采用的格式和这些格式代表的意义。
HTTP和HTTPS的基本概念
HTTP:超文本传输协议,是互联网上最广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准,用于从www服务器传输超文本到本地浏览器的传输协议。http传输超文本信息时是明文的,信息是不安全的,如果传输过程中黑客拦截了浏览器和服务器之间的传输报文,就可以直接获取其中的信息了。所以在支付之类的应用中,是不用http协议传输的。
HTTPS:以安全为目标的http通道,简单来说,就是http协议的升级版、安全版,即在http协议下加入了SSL协议,所以HTTPS的安全基础就是SSL,因此加密的详细内容就需要SSL。SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层:SSL记录协议(SSL Record Protocol),它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。SSL握手协议(SSL Handshake Protocol),它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
HTTP和HTTPS的区别
1,http协议是超文本传输,即明文传送的,传输的信息是未加密的;而https是在http的基础上加了ssl协议做安全性的。
2,https协议需要到ca申请证书,一般免费的证书比较少,因而需要一定的费用。
3, http和https使用的是不同的连接方式,端口号也不一样,前者是80,后者是443.
4,http的连接很简单,无状态的;而https协议是由ssl+http协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
HTTPS的优缺点
优点
1,使用https协议可以认证用户和服务器,确保数据正确发送到客户机和服务器。
2,https是由ssl+http构建的可以进行加密传输、身份认证的网络协议,比http协议安全,可以防止数据在传输过程中不被盗取、修改等等,保证数据的完整性、安全性。
3,https是现行架构下最安全的解决方案,虽然不是绝对的安全,但是它增加了中间人攻击的成本。
缺点
1,https协议握手比较费时,会使页面的加载时间延长。
2,https的连接缓存不如http高效,增加数据的开销,甚至已有的安全措施也会因此而受到影响。
3,ssl证书需要绑定ip,不能在同一个ip上绑定多个域名,IPv4资源不可能支撑这个消耗。
HTTPS的工作原理
首先,先了解几个概念:
HTTP:直接通过明文在浏览器和服务器之间传递消息,消息相当于“裸奔”在互联网中,是相当不安全的。
HTTPS:在HTTP的基础上增加了一个SSL协议,采用的是对称密钥加密(共享密钥加密)和非对称密钥加密(公开密钥加密)来保护浏览器和服务器之间的通信安全。
可以看到https在应用层和传输层之间加了SSL层,该层就是保证应用数据的加密层。具体怎么保证安全的,还需要继续往下看。
对称密钥加密:加密和解密用的是同一个密钥,也叫共享密钥加密,加密的时候必须将共享密钥明文传送给对方,如果此时攻击者拦截了共享密钥,那么使用共享密钥加密过的消息也就不安全了。
非对称加密(公开密钥加密):也叫公开密钥加密,是成对的出现的,分为公钥(随意发布的,任何人都可以获取)和私钥(只能由自己知道),公钥加密之后的内容必须通过私钥进行解密。服务端把公钥发送到客户端,客户端用服务端的公钥生成密文,然后把密文发送出去,接收方使用自己的密钥进行解密,这种加密方式,不需要把密钥暴露在互联网中,相对来说是安全的。
但是这种方式,也会出现一种情况,倒是传输的数据是不安全的,即:公钥在传输的过程中被攻击者拦截了,给客户端发送了一个攻击者自己的假的公钥,然后客户端不知道这是来自攻击者的公钥,就用这个假公钥对数据进行了加密,然后把加密后的数据发送给攻击者,攻击者用自己的私钥解密了数据,这样对数据也是不安全的,所以还是需要解决的。
到这里,就会引入一个第三方的机构,既然无法确定双方的身份,就和支付宝一样,用户和商家无法对货款和货物做出判断,那么就交由第三方进行监督,这里也是一样的,CA机构就是做这件事情的,在进行交换消息之前,服务器会向CA机构申请一个证书,CA证书,CA证书使用数字签名的方式加密,CA机构会审核服务器的身份后,才会颁发给服务端,CA证书具有权威性,中间的攻击者是很难伪造的,在颁发的同时还会有公钥和私钥,这时公钥就具有了权威性,中间人无法伪造,客户端在接收到公钥和证书后会首先对CA证书进行验证,如果验证通过才会继续后面的通信。
引入了CA证书的话,非对称性加密就做到了绝对安全,但是非对称加密效率比较低,比对称加密慢很多,所以,https就使用“对称加密+非对称加密”组合的方式做加密流程的。具体如下:
1,浏览器使用Https的URL访问服务器,建立SSL链接。
2,服务器接收到SSL链接后,发送非对称加密的公钥A给浏览器。
3,浏览器生成随机数,作为对称加密的密钥B(要传输的明文数据)。
4,浏览器使用服务器返回的公钥A,对自己生成的对称加密密钥B进行加密,得到密钥C。
5,浏览器将密钥C发送给服务器
6,服务器使用自己的私钥D对接受的密钥C进行解密,得到对称加密密钥B。
7,浏览器和服务器之间使用密钥B作为对称加密密钥进行通信。
小总结:通过上面的流程浏览器和服务器之间共享一个对称加密密钥B,而且不会被人监听和拦截到,之后的消息传递,使用密钥B进行对称加密。即:通过非对称加密对对称加密(对称加密是明文的)的密钥进行加密,在约定好了密钥后,然后后续的消息传递使用对称加密,这样算下来效率会提高很多。
重要:在第四步之前,浏览器会先判断发送来的非对称性公钥是否来自服务端,如果是,就使用此公钥对 对称性密钥B(明文数据)进行加密,生成密钥c,然后才会把密钥c发送给服务器,如果判断发来的公钥不是来自服务端,而是攻击者已经攻击了,就不会再对明文数据进行加密了。这个步骤到底怎么实现的呢?看下面的分析
a,第二步时,服务器向浏览器发送非对称性公钥A的时候,会通过hash算法把公钥和服务器的个人信息生成信息摘要。
b,为了防止信息摘要被调换,服务器会采用CA提供的私钥进行加密来生成数字签名。也就是说,数字签名是由服务器的公钥和服务器的个人信息组成的。
c,最后,会把之前没有经过hash算法之前的服务器公钥和服务器个人信息,和最后生成的数字签名 合并在一起,生成数字证书。然后才把数字证书发送给客户端。
d,客户端拿到数字证书之后,采用CA 的公钥对数字证书里的数字签名进行解密(加密的时候是使用CA的私钥对信息摘要加密的),来获取信息摘要。然后再对数字证书里面的服务器个人信息、公钥进行hash算法,得到另一份信息摘要。
e,最后客户端对两份摘要信息比对,如果一样的话,证明发送公钥者是服务器,否则的话,就是攻击者。
这就看到https加密的流程确实复杂,安全性也比较高。梦梦对这部分也是一知半解的,前段时间面试的时候被问到,入职之后做支付也是https协议的,于是才去查找资料了解https的加密原理,但感觉了解的不是多么的彻底,记录了一点自己目前所能领悟的。广大csdn的小伙伴看到这篇文章之后,如果有其他的理解或者想法,欢迎在下方留下你的评论,一起讨论探讨探讨。
以上是关于你是否了解HTTPS的加密原理?(面试常问)的主要内容,如果未能解决你的问题,请参考以下文章