详解HTTP和HTTPS加密原理
一 什么是http协议?
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。位于TCP/IP四层模型中的应用层。
HTTP协议通过客户端请求–>服务端响应的方式进行通信。但是HTTP有一个致命的缺点就是:不够安全。
HTTP协议的信息传输完全以明文的方式,不做加密,相当于在网络上裸奔。这样就会导致如下情况:
小A是客户端,小B时服务端,有一天小A试图给小B发送请求,但是由于传输信息是明文,这个信息可能被某个中间人恶意篡改,这种行为叫做中间人攻击。
如果进行加密呢?
小A和小B可以事先约定对称加密的方式,并且确定一个随机生成的秘钥,后续的通讯中,信息都是使用秘钥的对称加密,信息接收方通过同样的秘钥进行信息解密.
这样做是不是就会绝对安全了呢?并不是,虽然我们在后续的通讯中,对明文进行了加密,但是第一次约定加密方式和秘钥还是明文的,如果第一次被中间人拦截,那么中间人仍然可以通过秘钥进行解密信息内容。
HTTPS的加密算法:
非对称秘钥:非对称加密算法需要两个**:公开秘钥(publickey)和私有**(privatekey)。公开**与私有**是一对,如果用公开**对数据进行加密,只有用对应的私有**才能解密;如果用私有**对数据进行加密,那么只有用对应的公开**才能解密。因为加密和解密使用的是两个不同的**,所以这种算法叫作非对称加密算法。
首先需要小B把自己的公钥key1发送给小A:
小A收到小B的公钥key1以后,小A自己生成一个对称加密的秘钥key2,并且用key1对key2进行加密,发送给小B:
小B接收到了小A发送给自己的非对称加密的私钥,然后用自己的私钥解开key1拿到里面key2,然后就可以用key2进行加密通信了。在通信中,即使中间人拿到key1,但是不知道key1的私钥是什么,也无法得到key2。
这种情况会绝对安全的吗?
并不是,中间人虽然不知道小B的key1私钥是什么,但是截取了小B的key1之后,却可以偷天换日,自己生成一对公钥和私钥,然后把自己的公钥key3发送给小A。
小A不知道公钥key1被偷偷换过,以为key3就是小B发送的公钥,所以用key3加密自己生成的非对称**key2发送给小B
这一次再次被中间人截取,中间人先用自己的私钥解密key3拿到key2,然后再用截取小B的key1对key2进行加密,发送给小B。
这样中加人再次拿到了key2.
对称秘钥:对称**加密又叫专用**加密,即发送和接收数据的双方必使用相同的**对明文进行加密和解密运算。通常有两种模式:流加密和分组加密。这个时候需要加入第三方,一个权威的证书颁发机构(CA)来解决。那么到底怎么解决的呢?
1 作为服务端到的小B,首先把自己的公钥key1发送证书颁发机构,向证书颁发机构申请证书。
2 证书颁发机构自己也有一对公钥和私钥,机构利用自己的私钥加密key1,并且通过服务端的网址等信息生成一个证书签名,证书签名同样经过私钥加密,然后把证书发送给小B。
3 当小A向小B发送请求通信的时候,小B不在把自己的公钥key1发送回去,而是把自己申请的证书发送给小A。
4 小A拿到证书后,第一件事就是验证证书的真伪,因为各大浏览器已经维护了所有权威证书机构的名称和公钥。所以小A只需要是哪家机构的证书,就可以从本地找到对应机构的公钥,解密出证书的签名,接下来销毁按照同样的签名规则,自己也生成一个证书签名,如果来个签名一致,说明这个证书是有效的。验证成功后,小A就可以利用机构的公钥解密出key1。
原文链接:https://blog.csdn.net/qq_39057033/article/details/91361464
下一篇: C语言 文件操作解析详解及实例代码