踮起仰望 HTTPS原理

Posted 巨头之路

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了踮起仰望 HTTPS原理相关的知识,希望对你有一定的参考价值。

HTTPS原理

  • Http为什么是不安全的协议?

    使用http传输数据至少存在着数据被监听以及数据被篡改这两大风险,因此http是一种不安全的传输协议

  • HTTPS = HTTP + SSL(TLS)

    SSL 即安全套接字层,它在 OSI 七层网络模型中处于第五层,SSL 在 1999
    年被 IETF(互联网工程组)更名为 TLS ,即传输安全层,直到现在,TLS
    一共出现过三个版本,1.1、1.2 和 1.3 ,目前最广泛使用的是 1.2;TLS
    用于两个通信应用程序之间提供保密性和数据完整性。TLS
    由记录协议、握手协议、警告协议、变更密码规范协议、扩展协议等几个子协议组成,综合使用了对称加密、非对称加密、身份认证等许多密码学前沿技术

  • TLS:由于非对称加密的运算速度慢,而对称加密的运算速度较快,所以TLS使用了混合加密的方式,在通信刚开始时使用非对称加密算法来进行交换会话密钥,之后数据的传递采用对称加密算法,保证传输有效率

  • 摘要算法 : MD5 是属于密码哈希算法(cryptographic hashalgorithm)的一种,MD5 可用于从任意长度的字符串创建 128 位字符串值。尽管 MD5存在不安全因素,但是仍然沿用至今。可以通过加盐使得 摘要算法更加安全

    什么是加盐?在密码学中,盐就是一项随机数据,用作哈希数据,密码或密码的单向函数的附加输入。盐用于保护存储中的密码什么是单向?就是在说这种算法没有密钥可以进行解密,只能进行单向加密,加密后的数据无法解密,不能逆推出原文​

  • CA机构签发数字证书:CA机构专门用于给各个网站签发数字证书,从而保证浏览器可以安全地获得各个网站的公钥,公钥可以对" 之后传输的数据使用的对称加密密钥 " 进行加解密.

    • 1.首先,我们作为一个网站的管理员需要向CA机构进行申请,将自己的公钥提交给CA机构。CA机构则会使用我们提交的公钥,再加上一系列其他的信息,如网站域名、有效时长等,来制作证书
    • 2.证书制作完成后,CA机构会使用自己的私钥对其加密,并将加密后的数据返回给我们,我们只需要将获得的加密数据配置到网站服务器上即可
    • 3.每当有浏览器请求我们的网站时,首先会将这段加密数据返回给浏览器,此时浏览器会用CA机构的公钥来对这段数据解密
    • 4.如果能解密成功,就可以得到CA机构给我们网站颁发的证书了,其中当然也包括了我们网站的公钥。你可以在浏览器的地址栏上,点击网址左侧的小锁图标来查看证书的详细信息
  • 上面流程中提到的第4 点中的 “此时浏览器会用CA机构的公钥来对这段数据解密” 中的公钥,为了安全,又该如何获取到CA机构的公钥?

    这个问题就很好解决了,因为世界上的网站是无限多的,而CA机构总共就那么几家。任何正版操作系统都会将所有主流CA机构的公钥内置到操作系统当中,所以我们不用额外获取,解密时只需遍历系统中所有内置的CA机构的公钥,只要有任何一个公钥能够正常解密出数据,就说明它是合法的

  • 接上面的点,假如攻击者知道abc.com使用的是某家CA机构的证书,那么他也可以同样去这家CA机构申请一个合法的证书,然后在浏览器请求abc.com时对返回的加密证书数据进行替换,这时CA机构颁发的证书也不见得安全啊?
    有CA机构在制作的证书时除了网站的公钥外,还要包含许多其他数据,用来辅助进行校验,比如说网站的域名就是其中一项重要的数据,如果证书中加入了网站的域名,那么攻击者就只能无功而返了。因为,即使加密数据可以被成功解密,但是最终解密出来的证书中包含的域名和浏览器正在请求的域名对不上,那么此时浏览器仍然会显示异常界面

  • 总结:

    • HTTPS是由HTTP和TLS组成,HTTP负责数据的传输,TLS负责网站安全认证和数据安全;
    • 一般HTTPS协议都需要去向专门的CA机构签发数字证书,这数字证书是由网站的非对称加密的公钥、网站域名和证书有效时长

      组成,证书制作完成还需要用CA机构自家的私钥对其加密,之后将加密后的数据配置在网站服务器;
    • 当客户端请求网站时,网站将CA机构签发的加密数据返回给客户端,客户端使用系统内置的所有CA机构的公钥进行一
      一解密,只要有任何一个公钥能够正常解密出数据,就说明这个公钥是合法的,这步骤还需要校验客户端请求的域名和
      CA机构签发的证书里的域名等 数据 是否 一样, 以此 拿到网站
      非对称加密的公钥;
    • 之后客户端随机生成一个密钥(该密钥用于之后数据传输中,对称加密的密钥),使用公钥对齐加密,传输给服务端;
    • 服务端收到浏览器发过来的数据,使用非对称加密的私钥
      对齐解密,拿到密钥;
    • 之后数据传输,就用的 “对称加密” 对数据进行加解密。
  • 疑问点

    • 如果没有CA机构制作的证书,是否可行?
      • 假设没有CA机构制作的证书,那https首次传输是使用非对称加密算法来传输key,具体过程:即
        服务端使用非对称算法生成
        公钥A和私钥A,将公钥A传递给客户端,客户端生成密钥key,并使用公钥A加密,传递回服务端,服务端拿到数据之后,使用私钥A对其解密,拿到密钥key。
      • 那这个交换密钥的过程,假设有中间者监听并篡改公钥A呢?
        怎么篡改公钥A?
      • 公钥A传递给客户端的过程,中间者也使用非对称加密算法生成公钥B和私钥B,截取并使用公钥B替换公钥A,客户端收到公钥B,生成密钥key并使用公钥B加密,传递回服务端,那中间者就可以拿到该数据,并使用私钥B进行解密,从而拿到密钥key;
        接着是不是可以使用公钥A对密钥key进行加密,将该数据传递回服务端
      • 因此,没有CA机构制作的证书,是不可行的,因为还是会被盗取密钥key
  • 参考: https://mp.weixin.qq.com/s/DGIkZT26CBafJzpQgrqqdQ

以上是关于踮起仰望 HTTPS原理的主要内容,如果未能解决你的问题,请参考以下文章

加盐哈希以验证明文(不是密码)

两张图读懂SHA256加盐原理

两张图读懂SHA256加盐原理

两张图读懂SHA256加盐原理

两张图读懂SHA256加盐原理

加盐加密的介绍