目录
前言
HTTPS是什么
HTTPS的工作过程
引入对称加密
引入非对称加密
引入证书
总结
对于HTTP上篇文章已经做了详细的解释了。众所周知,HTTPS要比HTTP要安全,但是为什么HTTPS要比HTTP安全呢?
这篇文章主要研究HTTPS的加密机制。
HTTPS(Hypertext Transfer Protocol Secure)是一种通过加密和身份验证来保护网络通信安全的协议,使用默认端口是443端口。
主要是引入了一下的机制:
SSL(Secure Sockets Layer)/TLS(Transport Layer Security)协议:SSL和其继任者TLS是实现HTTPS加密的主要协议。这些协议使用了公钥加密和对称密钥加密的组合来确保通信的机密性、完整性和身份验证。
公钥加密:公钥加密也被称为非对称加密,使用了两个密钥:公钥和私钥。服务器拥有私钥,而公钥则被用于加密从客户端发送到服务器的数据。这样,只有服务器拥有私钥,能够解密数据。公钥通常由数字证书机构(CA)签发,用于验证服务器的身份。
数字证书:数字证书是一种由数字证书机构(CA)签发的电子文件,用于验证服务器的身份。它包含了服务器的公钥和其他相关信息,被用于建立安全连接并验证服务器的真实性。当客户端连接到服务器时,服务器会将数字证书发送给客户端进行验证。
对称密钥加密:对称密钥加密使用相同的密钥对数据进行加密和解密。在HTTPS通信中,一旦建立了安全连接,服务器和客户端之间会协商生成一个对称密钥,该密钥用于加密和解密数据的传输。
既要保证数据的安全,那么就需要加密。我们知道HTTP在网络上传输的数据是明文传输的。
而明文传输的数据在网络上就相当于“裸奔”。如何要让我们的数据在网络不在“裸奔”呢?
就需要给数据进行加密,变成密文。这也就是HTTPS要做的事。
加密的方式有很多种,整体就是两个类,分别是对称加密和非对称加密。
我们先来认识密钥:
密钥是用于加密和解密数据的关键信息。它是一个特定的值或参数,根据所使用的加密算法,用于转换明文(未加密的数据)为密文(加密的数据),或者将密文还原为明文。
在对称密钥加密算法中,同一个密钥被用于加密和解密数据。发送方使用密钥将明文加密为密文,并将其发送给接收方。接收方使用相同的密钥将密文解密为明文。对称密钥加密算法的主要优点是处理速度快,但密钥的安全传输和管理是一个挑战。
也就是说只有一个密钥,把明文加密和把密文解密。
在上述过程中,即使黑客通过入侵网络中的网络设备,拿到了数据,但是数据是进行了加密的,此时黑客并不知道密钥是啥,黑客也就没有办法获取到传输的数据了。
那么难道此时就绝对安全了吗,其实不然,要知道,服务器器在同一时刻是给很多台客户端提供服务的,这么多的客户端,每个客户端的密钥肯定是不同的,因此服务器此时就需要维护每个客户端和服务器之间的密钥关联关系。
此时服务器就需要维护这个密钥与客户端之间的关系。
于是发现既然每个客户端的密钥都不相同,那么让客户端自己生成一个密钥,用来加密和解密数据,但是服务器此时也要知道这个密钥用来解密和加密数据。那么如何让服务器也知道这个密钥呢?肯定要通过网络传输的方式来让服务器知道客户端生成的密钥。
此时客户端生成了密钥(key),于是就通过网络传输的方式来告诉服务器自己生成的key。但是黑客这时是非常容易拿到客户端生成的key的。
黑客拿到这key之后,服务器就通过key对数据进行加密,加密完成之后,进行网络传输,在传输的过程中,黑客已经知道了key,就可以轻而易举的进行解密,拿到想要窃取的数据了。
可以看出,这个方式并不是理想的加密方式,于是就引入了非对称加密。
在非对称密钥加密算法中,使用一对密钥:公钥和私钥。公钥是公开的,用于加密数据,而私钥是保密的,用于解密数据。发送方使用接收方的公钥加密明文并发送密文,接收方使用自己的私钥进行解密。非对称密钥加密算法提供了更好的密钥管理和身份验证机制,但处理速度较慢。
下面我们假设服务器生成了一对非对称密钥
公钥 pub
私钥 pri
上述过程中,客户端向服务器索要公钥来加密的数据就是自己生成的对称密钥key。
此时这个过程,黑客通过中间网络设备是已经知道了公钥的。但是黑客此时并不知道用来解密的私钥, 私钥是一直在服务器上的,并没有进行网络上的传输。用来解密的关键就是私钥。需要注意:公钥和私有是成对出现的,公钥只能用来加密,而私钥则是只能用来解密。
在传输的过程中,因为客户端把自己生成的密钥用pub(公钥)进行了加密,所以即使黑客截取到了数据,也是没有办法进行解密的,因为是用pub进行加密的,解密也就需要pri(私钥)来解密。
当服务器拿到了用pub进行加密的key之后,就是用pri来解密,然后服务器就知道了客户端生成的key。后续的业务数据的传输就是用key来进行加密。
上述的整个过程难道就安全了吗?其实不然,所谓道高一尺魔高一丈,于是黑客通过欺骗的手段还是能获取到我们的数据。就是所谓的中间人攻击。
通过在入侵的网络设备上进行伪造服务器的公钥和私钥来进行攻击的一种手段。
此时当服务器把自己的pub发给客户端的时候,黑客自己也生成了一对公钥和私有,我们记为pub2和pri2,此时黑客就会把自己的pub2给客户端发去,通过用把服务器的pub给悄悄记住了。
此时客户端使用黑客自己生成的pub2来对key进行加密,当发送出去之后,黑客就能通过自己生成的pri2来轻松的解密,得到了key,然后有把key重新使用服务器的pub来进行加密,然后发送出去,此时服务器并不知道key已经被黑客拿到了。
服务器拿到用pub加密的key之后,并不知道黑客已经拿到了key,于是就双方就放心大胆的使用对称密钥key进行传输。
但是黑客早就直到了key,所以在传输的过程中,黑客就使用拿到的key来对数据进行解密和加密,而服务器和客户端全然不知,数据已经全部暴露。
破解中间人攻击的关键就是让客户端直到这个服务器的公钥是不是已经被篡改的。
引入证书的机制就完美的破解了中间人攻击。
这个证书就好比人的身份证, 作为这个网站的身份标识. 搭建一个 HTTPS 网站要在CA机构先申请一个证书. (类似于去公安局办个身份证)。
这个 证书 可以理解成是一个结构化的字符串, 里面包含了以下信息:
引入证书之后,客户端就不会向服务器索要服务器的公钥了,而是索要证书。
当前是共有5个密钥,分别是服务器的pub1和pri1 ,颁发证书机构的pub2和pri2,还有客户端自己生成的key。
需要注意的是,由于颁发证书机构并不是很多,所以就在每个操作系统中都内置了颁发证书机构的公钥。
此时客户端拿到了这个证书之后,首先对证书进行了一个校验。
在整个过程中,黑客是无法对证书中的数据进行篡改的。
如果说黑客把证书中服务器的公钥改成自己的。然后进行发送,当客户端拿到证书之后,进行校验,发现签名中的校验和整个证书的属性校验值不一致。那么客户端就知道证书被篡改了,于是立马浏览器窗口进行报错。
当然黑客也有证书颁发机构的公钥,黑客如果想要通过证书的那个属性重写计算签名,当然也是可以计算的,但是计算完成之后需要对签名进行了加密。此时黑客就做不了,因为证书是由颁发证书机构的私钥进行加密的,黑客可以解开,但是加密不了。
引入证书机制之后,黑客就改不了证书中的数据了。
HTTPS 工作过程中涉及到的密钥有三组
总结起来,HTTP是一种不安全的协议,适用于不涉及敏感信息传输的普通网页浏览等场景。而HTTPS通过加密、完整性验证和身份认证,提供了更高级别的安全保护,适用于涉及敏感信息(例如个人信息、支付信息)传输的场景,如网上银行、电子商务等。