简单了解HTTP和HTTPS

HTTP的安全问题?

我们都知道HTTP是不安全的,而HTTPS是安全的,那HTTP有哪些安全问题呢?(考虑传输过程以及响应方)

  • 明文传输,有窃听风险:HTTP协议无法加密数据,所有通信数据都在网络中明文传输,通过网络的嗅探设备及一些技术手段,就可轻易窃听并还原HTTP报文内容。

  • 无法验证数据完整性,有篡改风险:HTTP协议无法证明通信的报文完整性发送方发出的请求和接收方接收到的响应是前后相同的,没有被篡改的。

  • 无法验证通信方身份,有冒充风险:在请求或响应到达接收方这段时间内,请求或响应被第三方拦截伪造之后再次发出,通信双方也无法知晓。

HTTPS如何解决的?

  • 混合加密明文解决窃听风险

  • 摘要算法为数据生成一个唯一的指纹,通过指纹验证报文完整性,解决篡改风险

  • 将服务器公钥放入到数字证书中,并把证书注册到CA,解决了冒充风险。

混合加密

HTTPS采用了非对称加密对称加密结合的方式:

  • TLS握手期间采用非对称加密交换交换随机数生成会话密钥

  • 此后的通信过程采用对称加密的会话密钥进行加密

为什么用混合加密?

对称加密虽然加密、解密的运算速度快,但是如果在HTTP明文传输密钥,那密钥可能会被窃取,也就相当于没有加密;

所以在对称加密之前,用非对称密钥加密随机数生成一个对称加密的会话密钥,保证这个会话密钥不会被窃取。

那为什么不直接用非对称密钥加密来进行通话的数据加密呢?

那是因为非对称密钥加密、解密的运算速度会比对称加密慢,对于数据通信我们自然不希望加密、解密的运算速度比传输的RRT还长。

非对称加密和对称加密的区别?

  • 非对称加密:发送方用接收方的公钥加密,接收方用私钥解密;或者发送方用自己的私钥加密,接收方用自己的公钥解密

  • 对称加密:双方用同一对密钥进行加密和解密

摘要算法

以下的指纹、hash值都是一个意思。

为了保证传输的内容不被篡改,我们需要对内容计算出一个「指纹」,这个哈希值是唯一的,且无法通过哈希值推导出内容。然后同内容一起传输给对方,接收方再次计算数据的hash值,和指纹比对,相同说明数据没有被篡改,但是不能说明内容和hash值没有一起被篡改(也就是消息来源是正确的吗?),这时候就要用到非对称加密:

  • 公钥加密,私钥解密。这个目的是为了保证内容传输的安全,保证只有私钥拥有者才能获取到数据

  • 私钥加密,公钥解密。这个目的是为了保证消息不会被冒充,保证消息来源是正确的

对指纹用私钥加密,然后客户端有对应的公钥,就可以解密,比对数据的hash值和指纹,相同则说明内容没有被篡改。

数字证书认证机构(CA)

万一公钥是被伪造的呢?这时候就需要有第三方的验证。

CA是第三方权威机构,服务端把「个人信息 + 公钥」打包成一个数字证书,放到CA,CA会用自己的私钥加密数字证书得到一个数字签名,客户端收到数字证书后先去CA验证是否合法(用CA的公钥解密,比对hash值),如果验证成功,就可以获取到服务端的公钥。

HTTPS建立连接流程

TLS握手在TCP三次握手之后,那RSA算法举例,主要分为以下几个步骤:

  1. 客户端发送请求,询问服务端用哪些密码套件和TLS版本

  2. 服务端ACK确认密码套件和TLS版本,同时会向客户端发送自己的数字证书(有服务端的公钥),客户端收到之后进行验证数字证书有效,从中获取到服务端公钥,用公钥加密一个随机数发送给服务端,服务端收到后用自己的私钥解密得到随机数,用这个随机数生成一个对称的会话密钥

  3. 客户端发送请求,请求之后的会话都用这个会话密钥,服务端响应ACK

  4. 服务端发送请求,请求之后的会话都用这个会话密钥,客户端响应ACK

  5. TLS握手完成,HTTPS建立连接完成

如何验证数字证书有效?

正如前面的摘要算法以及CA提到的,会对原文生成一个指纹,CA用私钥加密这个指纹得到数字签名,服务端同样对原文生成一个指纹,用CA公钥解密数字签名得到一个hash值,比对hash值和指纹,如果相同则说明验证成功。

HTTPS真的安全吗?

当有第三方在客户端和服务端中间,第三方伪造服务端和客户端TLS握手,同时第三方伪造客户端和服务端TLS握手,不就会产生问题吗?

换个问题表述,可以理解为第三方冒充的问题,主要是数字证书的信任问题,当你点击一个有风险的连接,浏览器会弹出警告,这时候如果你点击拒绝访问,自然TLS握手失效,也就不会有后面的数据通信过程;或者是电脑中病毒了,被第三方恶意植入了它的证书,浏览器不会弹出风险警告,那么通信也不再安全。

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值