面试中的常考问题:HTTPS是如何加密的,是对称加密还是非对称加密?估计被问到,脑子都是无法直接反应,看完这篇博客再碰到这个问题,面试官直接给你发offer。
要想搞清这个问题,让我们先了解对称加密和非对称加密。
对称加密:加密使用的密钥和解密使用的密钥是同一个密钥
E(p,k1) = c D(c,k2) = p k1 == k2
对称加密的加密和解密的性能更好,核心的破绽是密钥传输的安全性
非对称加密:加密和解密使用不同的密钥
E(p,k1) = c D(c,k2) = p k1 != k2
非对称加密的密钥成对出现,称为密钥对(key pair),其中一个密钥是”自己“保留的,只有一份,称为私钥(private key);另一份密钥可以公开出去,称为公钥(public key)。
E(p,private key) = c D(c,public key) = p
意味着”我“可以通过私钥加密数据,给任何拥有公钥的人,那么这些拥有公钥的人,可以通过手中的看懂”我“发出去的内容——但公钥的每个人都可以拿到,这种的加密还有什么意义?
意义在于防止伪造:因为只要可以通过公钥进行解密,说明这份消息一定是被于和公钥相对的私钥加密发送的。而私钥只有我有,说明这份消息一定是我发的,不是别人发的,类似于印章制度
E(p,public key) = c D(c,private) = p
意味着谁都可以向我发送消息,通过公钥进行加密,但是只有我有私钥,只有我能看懂。
非对称加密加密和解密的性能较差
下面来看看HTTPS的加密过程
总结:对称加密主要用于真正的数据传输,非对称加密,主要为对称加密,解决对称加密的密钥传输的安全问题。
再来想一想中间还可能什么问题
中间人劫持问题
如果出现这种情况,数据的传输就如同明文传输,中间人完全可见。
这种问题,我们通过证书(CA)机制来解决
CA(Certification Authority)证书当局——类比现实生活中的公证处
由公证处给服务器颁发一个证书(类比营业执照,写明了服务器是谁,提供什么服务,公证处的签名),服务器的公钥存放在证书中,客户端收到的不仅仅是一个公钥本身,而是一套围绕着公钥建立的证明体系。
在这里引入一个知识:
消息摘要技术:目的是防止数据本身被篡改。广义上是哈希技术的一部分
原始数据-->Hash(原始数据)-->摘要(哈希值),如果无意中,原始数据被改了,摘要就会发生改变,接收方验证摘要的正确性:Hash(原始数据)-->摘要,如果和发送方的摘要不同,就可以认为数据不是原始数据,被人篡改过。
消息摘要VS加解密技术
加解密是可逆的。 明文-->密文-->明文
消息摘要是不可逆的。 明文-->摘要
再回到CA和签名流程中来
开始,服务器要找CA为它颁发证书,服务器需要提供自己的信息,
CA制作证书,证书中包括域名为主的一系列信息,CA为服务器生成的密钥对中的公钥,然后为上述信息做为数据消息摘要的原始数据,使用CA的私钥对数据进行加密,生成证书和服务器的密钥对。
总结一下HTTPS的加密过程
当客户端发起请求时,服务器把证书直接给到客户端
客户端有CA机构的公钥,通过CA机构的公钥对证书进行解密
客户端能解开,说明证书肯定是CA颁发,然后通过消息摘要算法,域名为主的信息+公钥信息生成新的摘要,和证书中的老摘要进行对比二次验证。
最终拿到了服务器的公钥,按生成对称加密的密钥,通过服务器的公钥进行加密,传递给服务器。
服务通过自己私钥进行解密,得到对称解密密钥
双方使用对称加密,进行请求/响应的传输