HTTPS原理

目录

TLS协议的由来

如何用HTTPS来进行安全的传输

下面以RSA密钥协商的过程来完整的描述一下TLS协议

TLS第一次握手

TLS第二次握手

TLS第三次握手

TLS第四次握手

现在用传纸条来举个例子来更帮助理解一下为啥要这么麻烦好几个密钥​编辑

例子中的各个角色在HTTPS中传输的对应东西


TLS协议的由来

HTTP由于是明文传输,所以通过HTTP协议传输的网页容易受到窃听、篡改、冒充的风险。

由于HTTP的不安全,HTTPS出现了。HTTPS在应用层和传输层之间添加了一个TLS协议,用TLS协议来加密数据,这样HTTPS使用HTTP来进行通信,使用TLS来加密数据。这样就可以对网站服务器提供身份认证,保护数据的隐私和完整性。

如何用HTTPS来进行安全的传输

有了TLS协议,能保证HTTP通信是安全的了,在进行HTTP通信前,进行TLS握手,用来保障HTTP的安全传输,也就是HTTPS的安全传输。

下面以RSA密钥协商的过程来完整的描述一下TLS协议

TLS第一次握手

首先客户端会发哦是那个一个hello包,这个消息里面有客户端使用的TLS版本号、支持的密码套件列表,支持的压缩算法,以及生成的随机数,这个随机数会被服务端保留。这个随机数是身材对称加密密钥的材料之一

TLS第二次握手

当服务端收到客户端的hello包的时候,会确认TLS的版本号是否支持,然后服务端也会给一个随机数,然后从那个客户端刚刚给的那个密码套件里面选一个合适的密码套件。(密码套件的基本形式:密钥交换算法+ 签名算法 + 对称加密算法 + 摘要算法 ),然后服务端为了证明自己的身份会发送Server Certificate给客户端,这个消息里面有证书是由CA机构生成数字证书。然后服务端会发送Server Hello Done消息,目的是告诉客户端,本次打招呼完毕。

TLS第三次握手

客户端验证完证书后,认为可信继续往下走。然后客户端会生成一个新的随机数,。然后客户但会生成一个新的随机数,然后客户端用数字证书里面服务端的RSA公钥加密该随机数,然后放一个ChangeCipherSpec消息即编码改变的消息,还有整个前面所有消息的hash值。客户端使用前面的两个随机数以及刚刚新生成的新随机数,使用与服务器确定的加密算法,生成会话秘钥S。

TLS第四次握手

服务端收到消息,利用自己的RSA私钥解密,获得这个随机数。然后通过前端三个随机数以及他们协商的加密方式,计算生成会话密钥。然后服务端也会使用会话密钥加密一段我完成了的消息发送给客户端,已验证之前通过握手建立的加密通道是否成功。

现在用传纸条来举个例子来更帮助理解一下为啥要这么麻烦好几个密钥

在教室的两头有两个人小帅和小美如上图,他们两个在上课期间传递纸条要交流感情,传纸条的时候要借助路人的帮忙,将纸条传递过去。虽然路人可以保证将纸条传递过去,但是有些路人很坏,他恶作剧将小帅和小美传递的纸条,进行了内容的修改。小帅和小美之间造成了很多误会,但是下课后一比对,发现是有人修改了纸条。

小帅很生气,但是他还是想上课和小美交流感情。小帅冥思苦想,终于想出了一个办法,我给我传的纸条放在盒子里面,再在盒子上个锁,这个盒子上锁需要钥匙,解开也需要钥匙。这样里面的小纸条就看不到了,但是钥匙的传递也需要路人传(不要问为什么不下课传钥匙),这时路人又想要搞恶作剧,他在传递钥匙的时候偷偷把钥匙复制了一手,这样路人又可以取修改查看小纸条了。小帅刚为自己的智慧得意没两天,小纸条又出现了被人篡改的现象。

小帅一下子明白了有人偷偷复制自己的钥匙了。小帅不服又想了一个办法,他研究出了另外一把锁,这个锁很神奇,有两把钥匙不同的钥匙A和B,这个锁神奇的地方在于。用B加锁后需要用A来解锁,用A来加锁后需要用B来解锁。有了这个锁,路人就没有办法去修改小帅和小美的的小纸条,因为在传输过程中就算路人复制了钥匙,想要去修改锁里面的内容,之后也没有办法加锁,因为路人用复制的钥匙加锁后,再用复制的钥匙就解不开了。这样小纸条就有了防篡改的功能。但是这样小纸条的内容还是可以被不怀好意的路人看到。

但是小帅和小美的悄悄话又不想被看到,所以小帅又开始冥思苦想,小帅首先是想着用两把双钥匙,小美和小帅一人一把双钥匙,双方各自用那把在路人中间传输的那把钥匙进行加密。这样路人没有小帅和小美手里保存的那把钥匙,无法解密,无法观看,当然也不能篡改。但是用了一段时间双钥匙以后,小帅和小美觉得这个双钥匙的使用太麻烦,并且双钥匙的使用也很麻烦。

小帅又开始冥思苦想他想到了最开始的那把锁,那把锁用起来比较简单,他想着用单双钥匙进行配合使用,首先由小美设计出来一把双钥匙锁,然后我这边准备一个单钥匙锁,小美给小帅传一把钥匙,然后小帅用小美给的钥匙将单钥匙锁加锁传给小美,这样我们就可以安安稳稳的传递消息了。

但是好景不长,路人也研发出了这个双钥匙锁。并且在小帅传给我双钥匙锁中的一把的时候。将自己研发出的双钥匙锁中的一把传给了小帅,小帅不知道。这样小帅在将单钥匙锁的钥匙传给小美的时候,路人就可以解开了,因为路人传递的不是小美给小帅的钥匙,而是路人自己的钥匙。这时路人就获得了单钥匙锁的钥匙,又可以开始搞事情了。

小帅不甘心,很难受,绞尽脑汁,但是想要安全的传递没有只靠我和小美没有办法。于是小帅只好求助班长。小帅让班长准备了一个双钥匙锁,两把钥匙一把在自己手里,一把公开出去。小美在给小帅第一次传递钥匙的时候先传了班长,让班长用自己的双钥匙锁中的一把钥匙进行加锁。然后小美把班长加锁过后的盒子传递给小帅,我用班长公开的钥匙解开了盒子,就可以的到小美传给我的钥匙D了。这样路人没有办法秘密获得小美传给我的双钥匙锁的钥匙了,因为就算路人获得了小美传给我的盒子,他解开了也没有办法在上锁,因为加锁的钥匙在班长哪里。

例子中的各个角色在HTTPS中传输的对应东西

小帅:客户端

小美:服务端

路人:中间的传输链路

班长:CA机构

单钥匙锁:对称密钥

双钥匙锁:非对称密钥

双钥匙锁公开的钥匙:公钥

双钥匙锁不公开的钥匙:私钥


不嫌弃的点点关注,点点赞 ଘ(੭ˊᵕˋ)੭* ੈ✩‧

上一篇:[华为OD]实现一个支持优先级的队列,高优先级先出队列 100


下一篇:【紫光同创盘古PGX-Nano教程】——(盘古PGX-Nano开发板/PG2L50H_MBG324第四章)静态数码管显示实验例程