HTTPS

HTTPS是在HTTP基础上加密了。

一. 加密

1.对称加密:加密和解密使用的是同一把密钥。

明文+key=>密文  密文+key=>明文

2.非对称加密:加密和解密使用不同的钥匙。有一对密钥,一个被称为“公钥”,一个被称为“私钥”。(公钥是可以公开的,私钥是自己藏好的)

明文+私钥=>密文 密文+公钥=>明文 或者 明文+公钥=>密文 密文+私钥=>明文

二.HTTPS的工作原理

针对header和body进行加密。

  1.引入对称加密

客户端使用密钥进行对称加密,服务器拿着同一个密钥进行解密。

  客户端使用的是不同的密钥。这就要求每个客户端在和服务器建立连接的时候就把密钥生成出来(涉及随机数机制在里面,保证每个客户端生成的密钥不相同),客户端再通过网络传输把密钥发给服务器。

  那密钥被黑客截获不就完了吗?此时黑客就知道密钥是什么,也就可以对后续传输的加密数据进行解密。此时加密就形同虚设。

为了解决上述密钥安全传输问题引入了“非对称加密”。

2.引入非对称加密

  服务器生成一对公钥和私钥,服务器把公钥发给客户端,私钥自己藏好。客户端仍然生成对称密钥,使用服务器的公钥对对称密钥进行加密。服务器就可以通过私钥得到对称密钥,接下来服务器和客户端就使用这个对称密钥进行加密传输。黑客就算拿到加密后的对称密钥也无能为力,公钥加密需要私钥解密,私钥只有服务器有。

  为什么不直接使用非对称加密完成所有的加密传输,而是还要引入对称加密?因为非对称加密/解密运算成本比较高,运算速度比较低,而对称加密运算成本低速度快。使用非对称加密是一次性的,成本比较可控,后续要传输大量的数据都使用效率更高的对称加密。

  上述对称加密+非对称加密是HTTPS的基本盘,但是还存在漏洞。

  客户端向服务器询问公钥,服务器提前生成好了一对公钥(pub1)私钥(pri1),返回公钥(pub1)给客户端。黑客自己也生成一对公钥(pub2)和私钥(pri2),黑客就把自己生成的公钥(pub2)给客户端,客户端不知道这是黑客生成的公钥还以为是服务器生成的公钥,客户端于是使用黑客生成的公钥(pub2)对对称密钥进行加密,如此一来黑客就可以使用自己生成的私钥(pri2)解密得到对称密钥,并对对称密钥用服务器生成的公钥(pub1)重新加密返回给服务器(不让服务器发现其中的端倪)。服务器得到加密后的对称密钥使用私钥(pri1)解密也得到了对称密钥。接下来客户端就使用对称密钥进行加密传输,其中的数据就会被黑客获取。

  客户端也不知道得到的公钥是服务器生产的还是黑客生成的,如何解决这个问题呢?需要引入第三方可以被大家信任的“公证机构”证明公钥不是被黑客伪造的。

3.使用证书校验服务器的公钥

  网站搭建人员在搭建服务器的时候就会生成一对公钥和私钥(只要一份就行,所有客户端都用这同一份公钥),要想把服务器搭建好还需要向公证机构申请,申请需要提交材料(厂商、域名、公钥等),公证机构会对这些材料进行审核,审核通过后会给服务器颁发“证书”。这个证书是一段结构化的数据,这段数据包含网站的域名、证书的过期时间、服务器的公钥、数字签名(被加密的校验和),服务器会保存好这个“证书”。

  如此一来,客户端不再向服务器询问公钥,而是询问证书。客户端拿到证书后就拿到了证书中的公钥,就会校验这个公钥是否被黑客篡改,这个过程就是“证书的校验”。校验的核心机制是数字签名,也就是被加密的校验和。

  校验和就是把数据的每个字节代入公式计算得到一个结果,把校验和和数据一并发给对方,对方根据同样的方式再计算一遍校验和,如果得到的校验和和收到的校验和一致就说明数据没有问题。

  颁发证书的时候公证机构就会根据证书的各个属性计算得到校验和并针对这个校验和进行加密,这个加密是非对称加密,公证机构自己生成一对公钥私钥(和服务器生成的公钥私钥不同),公证机构会把公钥发布给各个客户端(公钥内置在客户端的系统里,安装好系统就会自带公证机构的公钥),公证机构使用自己的私钥对校验和加密得到数字签名。

  客户端拿到数字签名就可以通过系统内置的公钥进行解密得到最初的校验和,客户端再重新计算一遍校验和与解密出来的校验和对比就可以判断出证书没有被篡改过,公钥就是可信的(服务器原始的公钥)。

  在上述机制下如果黑客替换了公钥,那么客户端计算出来的校验和就会和解密出来的校验和不一样,客户端就认为证书被篡改过了(客户端这边会弹出一些对话框来警告客户存在安全风险)。黑客替换公钥后也无法替换数字签名,因为黑客拿自己的私钥加密客户端就无法用系统内置的公钥进行解密了,公证机构的公钥是系统自带的黑客也无法替换。

总结:三者结合保证HTTPS的安全性。

(A)使用对称加密业务数据。

(B)使用非对称密钥加密密钥。

(C)中间人攻击。

(D)使用证书校验服务器的公钥。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值