听说你还为答不好 HTTPS 而发愁?

2021/4/8 10:39:46

本文主要是介绍听说你还为答不好 HTTPS 而发愁?,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

老标题党了,即将发车,请坐稳了

涉及问题

  1. 说说你对 HTTPS 的理解
  2. 为什么比 HTTP 更安全
  3. 为什么不直接使用非对称加密或对称加密
  4. 为什么要握手,TLS 的握手过程能讲讲吗

出现原因及特点

HTTPS 相比 HTTP 主要解决原先存在的安全问题,如使用纯文本的形式传输 header,没有完整性校验无法验证是否篡改,没有有效手段确认通信双方的身份等。

除此之外,它和 HTTP 表现一致,如传输内容不限于文本,分为请求方和应答方,有连接无状态等。

如何保障安全

安全性主要由 SSL / TLS 来保障。HTTPS 由原来的直接和 TCP 通信,变为先和 SSL / TLS 通信。

SSL,指安全套接层。TLS,指传输层安全。两者其实含义相近,TLS1.0 是 SSL3.1的正式标准化版本。

使用 TLS 建立连接时,会选用一组加密算法,它也称为密码套件。命名格式比较固定,通常由密钥交换算法,签名算法,对称加密算法,摘要算法组成,来保障安全。

如,ECDHE-RSA-AES256-GCM-SHA384

在这里插入图片描述

安全与解决方案的对应

安全可以从四个方面来理解:

  1. 机密性,即只有可信的人才能访问,对应上述的密钥交换算法和对称加密算法
    HTTPS 采用混合加密的形式,使用非对称加密算法传输用于对称加密的密钥。
    非对称加密,分为公钥和私钥,通常基于复杂的数学问题,计算量大;
    对称加密,加密解密使用同一密钥,计算快,但交换密钥时存在安全问题。
    混合加密将两者结合,效益最大。

  2. 完整性,即数据在传输过程中没有发生篡改,对应上述的摘要算法

    请求方会生成摘要附在原文后,应答方收到数据后,再做一次计算进行比对来验证是否发生篡改。
    完整性需要以机密性为前提,否则可以同时篡改摘要和内容,便失去了意义。

  3. 身份认证,即可以验证对方身份的真实性。

  4. 不可否认性,即不能抵赖已经做过的事。

    身份和不可否认性,对应上述的签名算法

    使用私钥加密,公钥解密的方式,私钥加密原文摘要,即数字签名,公钥解密后与摘要进行比对,来达到验证身份的效果。

    数字证书是为了验证公钥的来源,即确认是你的公钥。借助 CA 证书认证机构,来为各个公钥签名(像现实中的大佬背书)。

    证书可以分为 DV, OV, EV,可信度递增。免费证书通常为 DV,只验证域名,并不知道持有者身份。证书中包含各项信息,如颁发者,使用者,有效期,公钥等

    CA 的信任链也可能出现问题,如被黑客攻击,此时可以选择在浏览器中撤销对 CA 的信任,或借助 CRL (证书吊销列表),OCSP(在线证书状态协议) 找到有问题的证书

TLS 握手

握手主要是为安全地交换会话密钥,也就是做前文提到的:使用非对称加密算法传输用于对称加密的密钥

在这过程中,共出现了三个随机数(C,S,Pre-master),主要用于提高随机性,达到不可预测,提高破解的难度

根据密钥交换算法(即非对称算法)的选择不同,可以分为两种。

一种为目前主流的使用 ECDHE,客户端和服务端会相互交换 ECDHE 的公钥,由两个公钥再使用 ECDHE 计算得 pre-master,和握手过程中交换得到的客户端随机数,服务端随机数一起生成主密钥。这种形式具有前向安全性,每次握手时交换的公钥私钥对都是临时的,黑客破解一个后只破解了一次会话。

另一种为传统的 RSA,由客户端直接生成随机数 pre-master,使用服务端提供的 RSA 公钥传递。之后的流程相似,借助三个随机数生成主密钥。相比 ECDHE,这种方式的公钥固定,容易被破解。

ECDHE 握手过程

超长图例

  1. 客户端向服务端:TLS 版本号,随机数 C,可选密码套件列表
  2. 服务端向客户端:TLS 版本号,随机数 S,选择的密码套件;证书;ECDHE 公钥,携带签名;
  3. 客户端向服务端:(验证证书和签名)ECDHE 公钥;(两边计算得 Pre-master,生成主密钥);改用会话密钥(Change Cipher Spec);握手数据摘要(Finished)
  4. 服务端向客户端:改用会话密钥;握手数据摘要

RSA 握手过程

超长图例

  1. 客户端向服务端:TLS 版本号,随机数 C,可选密码套件列表
  2. 服务端向客户端:TLS 版本号,随机数 S,选择的密码套件;证书
  3. 客户端向服务端:(验证证书和签名,生成 Pre-master)RSA 公钥加密 pre-master;(三个随机数生成主密钥);改用会话密钥(Change Cipher Spec);握手数据摘要(Finished)
  4. 服务端向客户端:改用会话密钥;握手数据摘要

致谢

透视 HTTP 协议 yyds!

本文为阅读 安全篇 后的总结,带有个人理解部分。
如存在理解偏差,欢迎一起讨论~



这篇关于听说你还为答不好 HTTPS 而发愁?的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程