文章目录
https原理
由于http协议内容都是按照文本方式明文传输的,这就会导致在传输过程中出现⼀些不安全的情况。
https也是⼀个应用层协,是在http协议的基础上引入了⼀个加密层
如果单纯的使用http协议,那么数据在网络传送中就以明文形式传送。如果http发送请求时,先经过 ssl/tls 的加密后再去传送,对方主机收到后再经过 ssl/tls 解密的过程就是https
https就相当于主机之间在应用层是明文的,但是在其他层是属于密文的
可以通过端口号来决定数据是否加密,例如80是http,443是https
为什么要加密
因为http的内容是明⽂传输的,明⽂数据会经过路由器、wifi热点、通信服务运营商、代理服务器等多个物理节点,如果信息在传输过程中被劫持,传输的内容就完全暴露了。劫持者还可以篡改传输的信息且不被双方察觉,这就是中间⼈攻击 ,所以才需要对信息进行加密
常见的加密方式
对称加密
采⽤单钥密码系统的加密方法,同⼀个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。
特征:加密和解密所用的密钥是相同的 ,算法公开,计算量小,速度快,效率高
非对称加密
需要两个密钥来进⾏加密和解密,这两个密钥是公开密钥(publickey,简称公钥)和私有密钥(privatekey,简称私钥)
公钥可以加密也可以用来解私钥加密的密文,私钥可以加密也可以用来解公钥加密的密文
因此公钥和私钥是配对的,缺点是运算速度非常慢
数据摘要&&数据指纹
数据摘要也就是数据指纹,用来确定数据的唯一性
其原理是**利用单向散列函数(Hash函数)对信息进行运算,⽣成⼀串固定长度的数字摘要。数字指纹并不是⼀种加密机制,但可以用来判断数据有没有被窜改 **
和加密算法的区别是,摘要严格意义不是加密,是没有解密的,只不过从摘要很难反推原信息,通常用来进行数据对比
数据签名
对数据摘要再进行加密,就得到数字签名
https的几种工作方案
方案一:只使用对称加密
客户端和服务端都是使用同一个密钥进行加密解密,引⼊对称加密之后,即使数据被截获,由于中间人不知道密钥是啥,因此就无法进行解密,也就不知道请求的真实内容了。
但是这种做法并不安全,因为服务器同⼀时刻其实是给很多客⼾端提供服务的,如果是相同密钥那就及其容易扩散,中间人也容易获取到。如果是每个客户端用的密钥都不一样,那服务器就需要维护每个客户端和每个密钥之间的关系,那这样的维护成本太大
比较理想的做法,就是能在客户端和服务器建立连接的时候,双方协商确定这次的密钥是什么,但是还有问题是因为密钥也要经过传输,但是如果密钥直接明文传输,中间人也很容易获取到,所以密钥进行加密,但是密钥加密的密钥也是如此。因为直接使用对称加密这种做法并不安全
方案二:只使用非对称加密
首先客户端向服务端申请公钥,服务端返回公钥给客户端,客户端使用公钥进行加密后传输,服务端接收到数据后用私钥解密处理数据后再用私钥加密返回。因为公钥和私钥是配对使用的,所以用公钥加密的数据必须得用私钥解密,私钥加密同理。
这种做法看似合理,实际上如果中间人在一开始客户端申请公钥使就已经开始劫持了,那中间人就会获取到公钥并篡改公钥,所以这种做法也不安全
方案三:两端都使用非对称加密
- 服务端拥有自己的公钥S与对应的私钥S’,客户端拥有自己公钥C与对应的私钥C’
- 客户端和服务端交换公钥
- 客户端给服务端发信息:先用S对数据加密,再发送,只能由服务器解密,因为只有服务器有私钥S’
- 服务端给客⼾端发信息:先用C对数据加密,在发送,只能由客户端解密,因为只有客户端有私钥C’
这种做法看似可以,实际上这种做法的效率非常低,并且和方案二一样中间人可以在两端交换公钥的时候就进行劫持并篡改,也并不安全
方案四:非对称加密 + 对称加密
因为非对称加密的效率很低,所以可以配合对称加密使用
也就是说这种做法是利用对称加密的密钥来给非对称加密的公钥进行加密传输,这样除了一开始是使用非对称加密外后面都是使用对称加密进行加密的。但是这种做法也不安全
还是一样的道理,如果中间人一开始就劫持了公钥那后面再怎么传输都离不开中间人的角色了
针对上述情况的中间人攻击
上述的方案二 三 四都是出现在了一个问题上,那就是如果一开始中间人就获取到了公钥。
一旦中间人获取到了就可以:
因此为了解决这种情况就要引入证书
证书
CA认证
服务端在使用HTTPS前,需要向CA机构申领⼀份数字证书,数字证书里含有证书申请者信息、公钥信息等。服务器把证书传输给浏览器,浏览器从证书里获取公钥就行了,证书就如身份证,证明服务端公钥的权威性
一个证书里面包含了:数据的签名和明文信息。其中明文信息里包含了:证书发布机构,证书有效期,公钥等
需要注意的是:**申请证书的时候,需要在特定平台⽣成查,会同时⽣成⼀对⼉密钥对⼉,即公钥和私钥。这对密钥对⼉就是⽤来在⽹络通信中进行明文加密以及数字签名的 **
https://myssl.com/csr_create.html
理解数据签名
签名的形成是基于非对称加密算法的
- CA机构拥有非对称加密的私钥A和公钥A’
- CA机构对服务端申请的证书明文数据进行hash,形成数据摘要
- 然后对数据摘要用CA私钥A’加密,得到数字签名S
服务端申请的证书明文和数字签名S共同组成了数字证书,这样⼀份数字证书就可以颁发给服务端了
方案5:非对称加密+对称加密+证书
在客户端和服务器刚⼀建立连接的时候,服务器给客户端返回⼀个证书,证书包含了之前服务端的公钥,也包含了网站的身份信息
每次的通信传输都需要进行证书认证:
假设中间人获取到了证书:
那如果中间人掉包了证书呢:
因此这种方法是可取的。