HTTPS加密传输

一.什么是HTTPS

1.1 https诞生的原因

HTTP 即超文本运输协议,是实现网络通信的一种规范.在实际应用中,HTTP常被用于在Web浏览器和网站服务器之间传递信息.

但是HTTP是以明文方式发送内容,不提供任何方式的数据加密,但这样的话,在传输过程中的每一个环节,数据都有可能被窃取或者篡改,这也意味着你和服务器之间还可能有个中间人,你们在通信过程中的一切内容都在中间人的掌握中,如下图
在这里插入图片描述
鉴于 HTTP 的明文传输使得传输过程毫无安全性可言,出现了HTTPS进行加密.

1.2 https加密方式

https其实是让http运行在安全的SSL/TLS协议上,即 HTTPS = HTTP + SSL/TLS,通过SSL/TLS协议来验证服务器的身份,并为浏览器和服务器之间的通信进行加密.

SSL 协议位于HTTP和TCP之间的安全层,经过这个安全层的数据会被加密和解密,大致结构如下图:
在这里插入图片描述
从图中可以看出,HTTPS并非一个新的协议.

1.3.http和https的区别

  • http是明文传输,存在安全风险;https使用SSL/TLS协议进行加密和解密,使数据传输更具安全性
  • http的端口是80;https的端口是443;
  • 使用http的数据传输只要进行TCP的三次握手连接;使用https的除了TPC三次握手,还需要经过SSL/TLS的握手,才可进入加密传输;
  • https因为需要加密,需要向CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的,而且功能越强大的证书费用越高

二. https的工作流程

  • 客户端发起https请求,连接服务端443端口;
  • 服务端有一套数字证书(证书内容有公钥、证书颁发机构、失效日期等),在收到请求后会将数字证书信息发送给客户端(公钥在证书信息里面,私钥由服务器持有)
  • 客户端验证数字证书的有效性
  • 验证通过后,客户端会取出证书信息里面的公钥;利用公钥将自己随机生成的密钥进行加密并传输给服务端
  • 服务端收到加密后的数据,利用自己保留的私钥进行非对称解密,取出客户端的密钥.然后将用户请求的结果数据利用客户端的密钥进行加密,并传输给客户端,这样传输的数据都是加密的密文了
  • 客户端收到数据之后,用自己密钥进行对称解密,获取最后的明文数据.
    在这里插入图片描述
    在这里插入图片描述

三. 数字证书

3.1 什么是数字证书

在上面流程中,有个叫数字证书的东西,那么这个是什么?有什么用呢?

通过对称和非对称混合方式,我们可以实现数据的加密传输。不过这种方式依然存在着问题,如果黑客通过 DNS 劫持将我们要访问官网的 IP 地址替换成了黑客的 IP 地址,当我们访问这个网站时其实就访问黑客的服务器了,黑客就可以在自己的服务器上实现公钥和私钥,而对浏览器来说,它完全不知道现在访问的是个黑客的站点。

所以针对这种情况,我们还需要服务器向浏览器提供证明“我就是我”,那怎么证明呢?这时候就需要一个权威机构,通过他颁发的证书来证明自己.

这个权威机构称为CA(Certificate Authority),颁发的证书就称为数字证书(Digital Certificate)

对于浏览器来说,数字证书有两个作用:一个是通过数字证书向浏览器证明服务器的身份,另一个是数字证书里面包含了服务器公钥。

3.2 如何申请数字证书

那么如何向 CA 申请证书。比如网站A需要向某个 CA 去申请数字证书,通常的申请流程分以下几步:

  • 首先 A 需要准备一套私钥和公钥,私钥留着自己使用;
  • 然后向 CA 机构提交公钥、公司、站点等信息并等待认证,这个认证过程可能是收费的;
  • CA 通过线上、线下等多种渠道来验证 A 所提供信息的真实性,如公司是否存在、企业是否合法、域名是否归属该企业等;
  • 如信息审核通过,CA 会向A签发认证的数字证书,包含了他的公钥、组织信息、CA 的信息、有效时间、证书序列号等,这些信息都是明文的,同时包含一个 CA 生成的签名。

3.3 如何验证证书有效性

在这里插入图片描述

扫描二维码关注公众号,回复: 14812178 查看本文章

首先了解CA签发证书的过程

  • CA先将网站A提交公钥、⽤途、颁发者、有效时间等信息打成⼀个包,然后对这些信息使用Hash算法进行计算,得到一个Hash值;
  • 然后CA使用自己的密钥将Hash值进行非对称加密,⽣成 Certificate Signature,也就是 CA 对证书做了签名
  • 最后将Certificate Signature 添加到证书上,形成数字证书

那么客户端校验服务端的数字证书的过程就可以按照这个流程反向操作:

  • 首先浏览器会读取证书中相关的明文信息,采用 CA 签名时相同的 Hash 函数来计算并得到一个Hash值 H1
  • 通常浏览器和操作系统中集成了 CA 的公钥信息,然后浏览器会使用CA公钥解密收到的证书签名,获得另一个Hash值 H2
  • 对比H1 和 H2 的值,如果相同,则证明证书合法;同时浏览器还会验证证书相关的域名信息、有效时间等信息
  • 这时候相当于验证了 CA 是谁,但是这个 CA 可能比较小众,浏览器不知道该不该信任它,然后浏览器会继续查找给这个 CA 颁发证书的 CA,再以同样的方式验证它上级 CA 的可靠性。通常情况下,操作系统中会内置信任的顶级 CA 的证书信息(包含公钥),如果这个 CA 链中没有找到浏览器内置的顶级的 CA,证书也会被判定非法。
    (内置 CA 对应的证书称为根证书,根证书是最权威的机构,它们自己为自己签名,我们把这称为自签名证书。)

四. 小结

这篇文章首先介绍什么是https,http和https的区别;然后介绍了https的工作流程;最后介绍了什么是数字证书,以及数字证书如何申请和验证

五.参考文献

  1. 18.说说HTTP 与 HTTPS 有哪些区别
  2. 什么是HTTP? HTTP 和 HTTPS 的区别?
  3. 极客时间 - 36 | HTTPS:让数据传输更安全

猜你喜欢

转载自blog.csdn.net/baidu_33438652/article/details/125131874