引言
面试中 HTTPS 应该是老生常谈了,下面我将结合计算机网络安全原理基础知识带着大家一起学习 HTTPS
如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉【入门&进阶全套282G学习资源包免费分享!】
现代密码系统
在聊 HTTPS 之前我们先补充一些网络安全原理中密码学的基础知识,学什么东西基础很重要吧
概述
现代密码系统通常可以划分为对称密钥密码系统和公开密钥密码系统两类。
1.对称密码系统,加密密钥和解密密钥完全相同,这种密码系统也称为单钥密码系统或者秘密密钥系统。简单的说用这种系统加密的明文,他们加密和解密的方法是一样的。
2.公开密钥密码系统中,加密密钥和解密密钥形成一个密钥对,两个密钥互不相同,从其中一个密钥难以推导出另外一个密钥。公开密钥面系统也被称为非对称密钥密码系统或者双钥密码系统。简单的说用公开密钥密码系统加密的明文,它的加密用的是一种方法,解密用的是另一种方法,当然这两钟方法存在着某种联系,让他们可以互相解密对方加密的东西。
两者的优缺点
1,对称密钥密码算法处理迅速,但是需要共享密钥,这往往需要耗费巨大的代价
2.公开密钥无需共享密钥,但是算法处理速度慢
在 HTTPS 中的应用
- HTTPS 采用共享密钥加密和公开密钥加密两者并用的混合加密机制。因为我们即希望它们的密钥能够安全交换,又能解决处理速度慢的问题
- 所以 HTTPS 在交换密钥环节使用公开密钥加密方式,之后的建立通信交换报文则使用共享密钥加密方式(对称密钥系统)
- 这样就解决了共享密钥加密方式,共享过程中密钥泄露问题,又能发挥出共享密钥加密的速度优势
数字证书
- 公开密钥加密方式有一个问题就是无法证明公开密钥本身就是货真价实的公开密钥,它很有可能是第三方伪造的,这个时候它就需要有一个身份的标识,这就是数字证书的作用
- 那么去哪里获取数字证书呢?得有一个颁发机构吧 ==> CA 机构
- 怎么确保这个证书就是CA机构颁发,是我们可信任的?CA 机构会用自己的私钥在证书上完成数字签名,用户通过它的公钥能成功解密就说明这个证书是它所颁发的,因为私钥是它独有的
散列函数
- 散列函数是现代密码学的重要组成部分,它也被称为“哈希函数”
- h = H(M),其中 h 表示散列码,H 表示散列函数,M 表示加密内容
- 对 M 的任意修改都将使 M 的散列值发现变化,通过检查散列值我们就可以判定 M 是否被修改过,因此散列值也被称为“数字指纹”
- HTTPS 中就是利用这一特性去保护传输内容的完整性
HTTPS
HTTPS 其实就是身披 SSL 外壳的 HTTP。
在采用 SSL 后,HTTP 就拥有了 HTTPS 加密、证书和完整性保护这些功能
过程解析
tips:在这里我不对它每一次握手过程去做很详细的解析,我就结合上面讲的内容描述一下它的要点,理解它的思想比起去记住它每一个步骤要重要得多
- 从图中我们可以看到服务器会向通信的客户端发送一个CA证书,然后客户端会去验证这个证书的有效性,即可以确定此公钥可信任
- 客户端生成一个随机数(预主密钥)并用对方的公钥进行加密,然后传输给对方;服务端会用自己的公钥去解密,即可得到这个随机数(预主密钥),这里就是利用了公钥密码系统的地方
- 双方在利用最开始协商决定的加密组件,去生成第三个随机数就会话密钥(master secret),后面就用这个会话密钥进行通信了,这里就是利用了对称密钥的地方
tips:在以上流程中,应用层发送数据会附加一种叫MAC的报文摘要,它能够查知报文是否遭到篡改,从而保护报文的完整性。原理其实就是我们刚才提到的散列函数。