https的定义
https的全程叫做Hypertext Transfer Protocol Secure(安全的超文本传输协议),是在不够安全的http上加入了SSL/TLS(安全套接层_百度百科 (baidu.com)/TLS_百度百科 (baidu.com))来保证http的安全传输。它的默认端口为443
它通过数字证书、加密算法、非对称密钥和对称密钥等技术保证数据在互联网中的安全传输,设计目标主要有三个:
数据保密性:https对数据进行封装,保证了数据传输中不会被第三方查看
数据完整性:如果中途数据被人掉包或者更改,可以及时发现并拒收
身份校验安全性:保证数据到达的地方是正确的
常见的加密方式
在探究https的工作方式前,我们需要先认识认识一些常见的加密方式:
对称加密和非对称加密
对称加密:采用一个密钥进行加密解密,常⻅对称加密算法有:DES、3DES、AES、TDEA、Blowfish、RC2等
对称加密的特点:算法公开、计算量小、加密速度快、加密效率⾼
例如:a数据使用密钥key进行加密生成b数据,到达目的地后,目的主机使用key对b数据进行解密,获得a数据。用一个异或的方式就很好理解:
假设a的数据是2222,key是1111,加密的过程可以看成(只是为了方便理解,实际上https中的对称加密并不是这样的)a ^ key = 3321 ,此时这个3321传入目的主机中,目的主机使用key解密:3321^key = 2222 = a,这样就实现了加密传输
非对称加密:采用一个公钥和一个私钥进行加密解密,私钥和公钥可以互相加密解密,但是私钥一般只有自己有,公钥是公开的。也就是说如果没有私钥,获取了公钥加密后的信息,也无法解开加密后的数据。但如果是私钥加密的就不管任何人都可以用公钥解密。
常见非对称加密算法:RSA,DSA,ECDSA
非对称加密特点:算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,⽽使得加密解密速度没有对称加密解密的速度快。
数据摘要(数据指纹)
数据摘要(数据指纹)指的是将数据通过一个hash函数而形成的一段固定长度的数据摘要,一般来说,这个不用做加密解密,用于判断传入的数据是否正确(在数据签名时使用)
数据签名
数据签名的概念过程如下:
数据通过散列函数(hash)生成数据摘要,然后使用CA的私钥进行加密,并将认证证书和加密后的数据一起加入到数据中,形成数字签名的数据。
数据签名的数据传入目标中后拆分成明文数据和数字签名,使用CA公钥解密签名获得数字摘要,再使用散列函数将明文传入的数据形成数字摘要,将两个数字摘要进行对比,如果相同那么就表示这个数据传入没有被篡改。
图中的“认证”指的是CA证书(认证)
CA证书:CA认证,就是电子认证服务,相当于我们的身份证,用以向别人证明自己是安全可靠的(证书颁发机构(CA, Certificate Authority)即颁发数字证书的机构。是负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任)
在开始的时候对数据进行数据摘要,方便之后在目的地址中对明文数据同样进行摘要,来判断它两是否一样,来保证数据的正确性。这就是数据摘要在数据签名中的运用。
为什么数据签名非常安全呢?
如果中间人获取数据后,修改明文数据。在进行验证时就会发现明文散列出来的值和用公钥解密后的值对不上,接收方马上就可以意识到数据被掉包了
如果中间人获取数据后,用公钥解密并获取散列值,但是由于中间人没有CA机构的私钥,所以无法对解开后的数据再次进行加密,传过去的值还是对不上
如果中间人获取数据后,对证书进行整体掉包,将自己的证书和数据发给接收方呢?证书中包括了域名等发送方的认证信息,如果证书+数据整体掉包了,那么接收方也能查出来(访问的域名和传来的证书域名不一样)
https的工作过程
https的工作过程主要使用非对称加密+对称加密+证书认证
用文字描述为:
客户端向服务器请求https连接,服务器通过数字签名将证书和公钥返还给客户端,客户端对数字签名进行验证,如果未被更改则访问该服务器是安全的。
客户端再随机生成一个密钥用于对称加密,用服务器的公钥加密对称的密钥(只有服务器的私钥可以解开),发送后服务器用私钥解密,获得对称的那个密钥
客户端和服务器都有了这个对称密钥后,就可以使用这个密钥进行通信,同时如果数据被拦截,因为中间人没有这个对称密钥,所以解不开这个加密后的数据