HTTPS 是什么
HTTPS协议(HyperText Transfer Protocol Secure) 是基于HTTP协议的安全版,用于在Internet上安全地传输私密信息。HTTPS通过传输加密和身份认证保证了传输过程的安全性。
HTTPS主要由两部分组成:HTTP+SSL/TLS,即在HTTP的基础上通过传输加密(SSL/TLS)来保障传输过程的安全性。
一、什么是加密
- 加密:把 明⽂ (要传输的信息)进⾏⼀系列变换,⽣成密⽂
- 解密:把 密⽂ 再进⾏⼀系列变换, 还原成 明⽂
二、常见的加密方式
对称加密
- 采⽤单钥密码系统的加密⽅法,同⼀个密钥可以同时⽤作信息的加密和解密,这种加密⽅法称为对称加密,也称为单密钥加密,特征:加密和解密所⽤的密钥是相同的
- 常⻅对称加密算法(了解):DES、3DES、AES、TDEA、Blowfish、RC2等
- 特点:算法公开、计算量⼩、加密速度快、加密效率⾼
⾮对称加密
- 需要两个密钥来进⾏加密和解密,这两个密钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。
- 常⻅⾮对称加密算法(了解):RSA,DSA,ECDSA
- 特点:算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,⽽使得加密解密速度没有对称加密解密的速度快。
三、数据摘要&&数据指纹
数据摘要和数据指纹是同一个意思。
- 数字指纹(数据摘要),其基本原理是利⽤单向散列函数(Hash函数)对信息进⾏运算,⽣成⼀串固定⻓度的数字摘要。数字指纹并不是⼀种加密机制,但可以⽤来判断数据有没有被窜改。
- 摘要常⻅算法:有MD5、SHA1、SHA256、SHA512等,算法把⽆限的映射成有限,因此可能会有碰撞(两个不同的信息,算出的摘要相同,但是概率⾮常低)
- 摘要特征:和加密算法的区别是,摘要严格意义不是加密,因为没有解密,只不过从摘要很难反推原信息,通常⽤来进⾏数据对⽐
数据指纹的作用一般是判断两个文件是否相同和判断文件是否被修改,本质就是生成一串固定长度的近乎唯一的数字摘要
四、数字签名
五、https是如何实现数据加密?
这里有几种方案可供选择
方案一:只使用对称加密
如果通信双方同时持有密钥X,那么确实可以实现数据加密,但是每个客户端和服务器都需要有一个密钥(如果共用一个密钥,保密性必然会很差),那么光是密钥服务器就要存上很多,显然是不合理的。
那么如果我们让服务器在提供服务前动态生成一个密钥呢,这样好像就解决了上面密钥过多的问题,但是我们在传输密钥的时候,就需要我们对密钥数据进行加密,显然这是有问题的
所以该方案是不可取的
方案二:只使用非对称加密
所以该方案是不可取的
方案三:双方都使用非对称加密
抛开中间人篡改数据的操作,所以该方案是可取的,但是效率不高
方案四:非对称加密+对称加密
抛开中间人篡改数据的操作,所以该方案是可取的,并且效率高
总结:我们发现上面的几种方案,都可能在一开始就被中间人篡改密钥,从而无法实现通讯双方的信息加密安全,本质其实是客户端无法识别服务器发送过来的密钥的"真假",如果解决了这个问题,那么在配合上方案四,我们就能高效的实现数据加密了
六、如何让客户端识别出密钥的"真假"?--- CA证书
1、介绍
CA证书(Certificate Authority)是由认证机构服务者签发,是数字签名的技术基础保障,也是网上实体身份的证明。它能够证明某一实体的身份及其公钥的合法性,并证明该实体与公钥二者之间的匹配关系。证书是公钥的载体,证书上的公钥与实体身份相绑定。
CA证书在电子商务系统中起着关键作用,所有实体的证书都是由证书授权中心即CA中心颁发并签名的。一个完整的、安全的电子商务系统必须建立一个完整的、合理的CA体系。CA体系由证书审批部门和证书操作部门组成。
CA证书的主要内容包括:证书服务机构的名称、证书持有人的名称及其签名验证数据、证书序列号、有效期、服务机构签名等。此外,CA证书具有数据电文交换中身份识别、电子签名、加密解密等功能。
在申请CA证书时,用户需要向CA申请数字证书,并提供身份信息和公钥。CA会对用户身份进行一系列验证,确保其真实性和合法性。验证通过后,CA会通过自己的私钥对用户公钥和身份信息进行数字签名,生成数字证书。用户可以将数字证书存储在其计算机、服务器或其他设备中,用于加密或身份验证等操作。
另外,CA数字证书的有效期一般为一年,到期前需要进行更新以保证其有效性。如果CA证书过期,用户需要从证书颁发机构获取新的证书,并安装到相应的设备上进行测试以确保其正确生效。
那么CA证书是如何实现让客户端能判别密钥的"真假"的?
2、CA证书的原理
上面的关键步骤在于如何签发证书和验证证书
那么这样做中间人就无法通过篡改数据来得到数据了么?
1、如果只改变证书的数据,那么数据通过散列函数得到的散列值必然不会等于解密后的散列值
2、如果只改变证书的签名,首先我们没有私钥(因为客户只认CA的公钥,所以我们也必须用私钥加密散列值才行),无法对修改后的散列值进行签名,其次就算能这么做,数据通过散列函数得到的散列值也不会和我们修改后的散列值相等
3、如果我们同时改变证书的数据和签名,首先我们没有私钥,无法对修改后的散列值进行签名,所以我们只能用一个真的证书去替换server发的证书,但这显然是无法成功的,因为客户访问的域名和我们替换的证书上的域名定然不同,客户端依旧能识别出该证书是"假的"
综上所诉:由于CA证书机构的私钥是私有的,我们就能通过验证证书是否被篡改的方式来让服务器的公钥正确的传送给客户
我们的浏览器中就有内置了很多的相关证书,可以在设置->安全中找找看
网上也有相关的网站能帮助我们生成申请证书的csr文件,有兴趣大家也可以去搜一搜