目录
HTTPS协议
HTTP 协议内容都是按照⽂本的⽅式明⽂传输的. 这就导致在传输过程中出现⼀些被篡改的情况.
在网络上搜索资料时,会看到有人把HTTPS叫HTTPS协议(全称:Hypertext Transfer Protocol over Secure Socket Layer),这种叫法不能说是错的。但严格来说HTTPS不是一个新的独立协议,他是HTTP协议加上安全协议(SSL/TLS)的统称。
其中SSL是个加密 套件,负责对HTTP的数据进行加密 。TLS是SSL的升级版。现在提到HTTPS,加密套件基本指的是TLS。
加密
加密就是把 明文 (要传输的信息) 进行一系列变换,生产 密文。
解密就是把 密⽂再进⾏⼀系列变换,还原成 明⽂.
在这个加密和解密的过程中,往往需要⼀个或者多个中间的数据,辅助进⾏这个过程,这样的数据称为密钥。
对称加密
采⽤单钥密码系统的加密⽅法,同⼀个密钥可以同时⽤作信息的加密和解密,这种加密⽅法称为对称加密,也称为单密钥加密,特征:加密和解密所⽤的密钥是相同的
常⻅对称加密算法(了解):DES、3DES、AES、TDEA、Blowfish、RC2等
特点:算法公开、计算量⼩、加密速度快、加密效率⾼
问题:对称加密看上去好像完美地实现了机密性,但其中有一个很大的问题:如何把密钥安全地传递给对方,术语叫"密钥交换"。如何在最开始的时候将密钥传输给服务器,很容易被截获,所以并不安全。
非对称加密
基于对称加密的问题,就引入了另一种加密机制,即非对称加密。这个加密机制有两个密钥,一个叫"公钥"(public key),一个叫"私钥"(private key)。两个密钥是不同的,公钥可以公开给任何人使用,而私钥必须严格保密。
公钥和私钥有个特别的"单向"性,虽然都可以用来加密解密,但公钥加密后只能用私钥解密,反过来,私钥加密后也只能用公钥解密。常⻅⾮对称加密算法(了解):RSA,DSA,ECDSA
特点:算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,⽽使得加密解密速度没有对称加密解密的速度快。
问题:非对称加密面临同样的问题,会被中间人截获,换为自己的密钥和公钥。
数据摘要(数据指纹)
数字指纹(数据摘要),其基本原理是利⽤单向散列函数(Hash函数)对信息进⾏运算,⽣成⼀串固定⻓度的数字摘要。数字指纹并不是⼀种加密机制,但可以⽤来判断数据有没有被窜改。
摘要常⻅算法:有MD5、SHA1、SHA256、SHA512等,算法把⽆限的映射成有限,因此可能会有碰撞(两个不同的信息,算出的摘要相同,但是概率⾮常低)
摘要特征:和加密算法的区别是,摘要严格意义不是加密,因为没有解密,只不过从摘要很难反推原信息,通常⽤来进⾏数据对⽐
应用场景:
1.注册和登录:注册某讯的账户,用户先将username+password传输给server端,server此时需要对该信息进行保存,为了防止监守自盗和被攻击导致用户信息泄露的问题,此时服务器会通过特定的hash函数将信息生成一串固定长度的摘要,将该数据摘要存储到数据库中。当下一次用户登录的时候,只需要将该信息也通过特定的hash函数得到数据摘要,用该摘要和数据库中的信息进行比较即可判断是否登录成功!
2.某盘的数据存储:对于多用户进行网盘存储资源的时候,server端先将要存储的资源通过hash函数生成数据摘要,和数据库中存储的数据摘要进行比较。如果存在,直接创建一个新的映射关系(如:硬连接或者软连接),如果不存在,才对数据进行真正的存储,这样同样的数据在网盘中只需要存储一份即可。这就是所谓的秒存!
HTTPS安全问题
我们通过学习对称加密和非对称加密知道,无论单独使用哪个加密还会存在安全问题。
接下来我们继续探究对称加密和非堆成加密组合使用。
对称加密+非对称加密
此时数据传输是安全的嘛,答案还是不安全的。
这种情况下,出现不安全的原因在哪里? 本质上就是客户端获取的服务器的公钥被替换了。如何解决这一问题,需要引入证书。
证书
服务端在使⽤HTTPS前,需要向CA机构申领⼀份数字证书,数字证书⾥含有证书申请者信息、公钥信息等。服务器把证书传输给浏览器,浏览器从证书⾥获取公钥就⾏了,证书就如⾝份证,证明服务端公钥的权威性
这个 证书 可以理解成是⼀个结构化的字符串, ⾥⾯包含了以下信息:
需要注意的是:申请证书的时候,需要在特定平台⽣成查,会同时⽣成⼀对⼉密钥对⼉,即公钥和私钥。这对密钥对⼉就是⽤来在⽹络通信中进⾏明⽂加密以及数字签名的。
其中公钥会随着CSR⽂件,⼀起发给CA进⾏权威认证,私钥服务端⾃⼰保留,⽤来后续进⾏通信(其实主要就是⽤来交换对称秘钥)
数据签名
当服务端申请CA证书的时候,CA机构会对该服务端进⾏审核,并专⻔为该⽹站形成数字签名,过程如下:
CA机构拥有⾮对称加密的私钥A和公钥A'
CA机构对服务端申请的证书明⽂数据进⾏hash,形成数据摘要
然后对数据摘要⽤CA私钥A'加密,得到数字签名S 服务端申请的证书明⽂和数字签名S共同组成了数字证书,这样⼀份数字证书就可以颁发给服务端了
证书如何保证安全的?
1.通过某种公开的散列函数将数据进行运算得到一个散列值,如果中间人修改数据内容,会导致最后算出来的结果与签名中通过加密保存的散列值不同,可以发现已经修改数据内容。
2.如果中间人要修改签名,客户端在进行使用CA公钥进行解密时,由于CA的密钥只有CA持有,所以中间人修改的签名不能通过CA的公钥进行解密,此时也会发现已经修改内容。
客户端认证
当客⼾端获取到这个证书之后, 会对证书进⾏校验(防⽌证书是伪造的).
判定证书的有效期是否过期
判定证书的发布机构是否受信任(操作系统中已内置的受信任的证书发布机构).
验证证书是否被篡改:从系统中拿到该证书发布机构的公钥,对签名解密,得到⼀个hash值(称为数据摘要),设为hash1.然后计算整个证书的hash值,设为hash2.对⽐hash1和hash2是否相等.如果相等,则说明证书是没有被篡改过的.
查看客户端证书
中间⼈没有CA私钥,所以对任何证书都⽆法进⾏合法修改,包括⾃⼰的
解决数据安全问题(引入证书)