对于这部分一直都是迷迷糊糊的,之前是大学打算考中级软件设计师接触到这部分的内容,当时大学课程没有这部分,看参考书也看的一知半解,处于剪不断理还乱的状态,今天看一份资料讲的很详细,总算把这一部分大概理清楚了,记录一下思路,方便之后再找思路。
HTTPS
因为HTTP是明文传输,不安全,HTTPS会对数据加密。
加密
加密常见分为两种,对称加密,非对称加密
对称加密 发送方和接收方使用相同的密钥,
优点:计算量⼩、加密速度快、加密效率⾼。
缺点:最一开始双方约定密钥的时候,把密钥传递给对方很不安全。
非对称加密 发送方有公钥,接收方有公钥和私钥,公钥和私钥能相互解密。
发送方使用公钥加密,接收方使用私钥解密。
优点:⾮对称加密与对称加密相⽐其安全性更好
缺点:加密和解密花费时间⻓、速度慢,只适合对少量数据进⾏加密。
HTTPS加密方案
HTTPS的加密方案采用对称加密和非对称加密相结合的方案。对称加密的效率高,但约定密钥的时候不安全;非对称加密的效率低,但安全。折中+套娃,在约定 对称加密密钥 的时候采用 非对称加密,这样就安全,后续采用 对称加密 进行沟通,这样效率就快。
对称加密的密钥由浏览器随机生成,它的“使命”是护送数据,非对称加密的“密钥对”由服务器自行生成
整体流程:
浏览器向服务器发送请求
服务器给浏览器返回公钥,浏览器获得公钥
浏览器使用公钥加密 对称加密密钥,发送给服务器,服务器有密钥能解密,第三方没有密钥不能解密,服务器获得 对称加密密钥,至此使用 非对称加密 成功约定 对称加密密钥
后续通信都使用 对称加密
风险:若服务器给浏览器返回的公钥是假的,不安全的,那么后面的约定对称加密密钥和后续通信都不能实现。
数字(CA)证书
CA用CA私钥对服务器的公钥施加数字签名,生成证书返回给服务器,CA公钥内置在浏览器中
所以需要 数字(CA)证书 :CA证书中⼼会服务器的公钥, ⽹站的域名地址, 证书到期时间, 等⼀些相关信息⼀起加密签发数字证书。
浏览器向服务器发送请求后,服务器会返回CA证书(包含公钥),浏览器会检查CA证书,若正在访问的服务器信息和CA证书不吻合,说明该网站可能在假冒别的服务器,浏览器则会给用户提示。
风险:若数字(CA)证书被篡改了怎么办,浏览器就不会发现其中的猫腻,无法给用户提示。
数字签名
CA用CA私钥对服务器的公钥施加数字签名,生成证书返回给服务器,CA公钥内置在浏览器中
所以需要 数字签名:数字(CA)证书的唯一证明,用来证明CA证书的清白。
数字签名:使用hash算法计算出证书内容的摘要,CA使用CA私钥加密,就是数字签名
流程
浏览器向服务器发送请求,服务器返回CA证书
浏览器使用 CA公钥 解密证书的数字签名,得到被hash算法加密过的证书摘要A,将收到的CA证书用hash加密得到摘要B(hash算法加密不可逆,对称加密和非对称加密都可逆),将加密摘要A和加密摘要B比较,可以确定CA证书是否被篡改过。
如果没有异常,浏览器使用CA证书里的公钥加密 对称加密密钥,服务器收到对称加密密钥,后续使用对称加密通信。