面试题——HTTPS是如何保证安全的?

解决方案:结合两种加密方式,将对称加密的密钥使用非对称加密的公钥进行加密,然后发送出去,接收方使用私钥进行解密得到对称加密的密钥,然后双方可以使用对称加密来进行沟通。

此时会带来中间人问题:如果此时在客户端和服务器之间存在一个中间人,这个中间人只需要把原本双方通信互发的公钥,换成自己的公钥,这样中间人就可以轻松解密通信双方所发送的所有数据。

这个时候需要一个安全的第三方(CA)颁发证书,证明对方身份,防止被中间人攻击。证书中包括:持有者公钥、持有者信息、签发者CA信息、证书有效期、其他额外信息等,加上针对前面内容的数字签名和使用的哈希算法。对方发来证书后,通过使用提前内置好的CA公钥对数字签名解密,若解密成功,则证明数字签名来自CA,未经过篡改,解密后得到的摘要H2是CA针对正确的证书内容进行哈希运算的结果。然后如果H2和接收者针对接收证书进行哈希计算得出的摘要H1一致,则证明接收到的证书未被篡改,然后确定其中的公钥确实来自对方。
在这里插入图片描述
(图源:小林coding)

发送内容时,如何保证内容不被篡改:采用数字签名技术。发送者将【内容+数字签名(内容用哈希算法计算得到摘要,再将摘要使用私钥加密得到数字签名)】发送出去,接收者用哈希算法求接收内容的摘要1,再用自己的公开密钥解密接收的数字签名得到摘要2,解密成功说明接收的数字签名来自于发送者,未经过篡改,解密得到的摘要是发送者针对正确内容进行哈希运算得到的结果。然后将两个摘要1和2比对,一致则说明接收到的【内容】未被篡改。

为什么前面的数字签名技术主要采用私钥加密,公钥解密的方式而不是公钥加密和私钥解密:保证消息不会被冒充,来源于持有私钥的人。也就是说保证接收的消息就是发送者发出的消息,消息未经过篡改。

为什么不直接对内容进行私钥加密和公钥解密来保证内容不被篡改,而是先对内容进行哈希运算再进行私钥加密:一般我们不会用非对称加密来加密实际的传输内容,因为非对称加密的计算比较耗费性能。所以通过私钥加密和公钥解密保证收到发送者针对正确内容哈希运算的结果1,然后再通过比较接收内容进行哈希运算的结果2和结果1是否一致来保证内容不被篡改。

总结一下哈希算法与数字签名的用处:哈希算法保证消息的完整性,消息没有被篡改(这里的“消息”主要是实际内容,只要哈希值不变,内容也就不变),数字签名保证消息来源的可靠性,消息来自于持有私有密钥的一方,消息没有被篡改(这里的消息主要是实际内容的哈希值)。哈希运算通过比较哈希值判断内容是否发生变化,数字签名保证哈希值没有被中间人篡改,进而通过比较哈希值判断内容是否被篡改。

参考:
小林coding——HTTPS 解决了 HTTP 的哪些问题?
小林coding——HTTPS 是如何建立连接的?其间交互了什么?

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值