美文网首页
HTTP和HTTPS的简单认识和区别以及HTTPS的加密过程

HTTP和HTTPS的简单认识和区别以及HTTPS的加密过程

作者: iOS之文一 | 来源:发表于2021-12-21 20:27 被阅读0次

    计算机网络系列文章汇总

    主要讲述HTTPS的安全性原理、加密过程,以及对称加密和非对称加密的各种加密算法,最后会分析HTTP和HTTPS的区别

    主要内容:

    1. HTTP的认识
    2. HTTPS的认识
    3. 对称加密和非对称加密的认识
    4. SSL/TLS协议
    5. HTTP和HTTPS的区别

    1、HTTP的认识

    HTTP(Hyper Transfer Protocol)超文本传输协议,是一个应用层协议,基于TCP链接进行可靠传输,客户端向服务器发送请求报文,服务器端回复响应报文进行一次通话

    1.1 请求响应过程

    请求响应.png
    1. 每个万维网网点都有一个服务器进程,它不断地监听 TCP 的端口 80,以便发现是否有浏览器向它发出连接建立请求。
    2. 一旦监听到连接建立请求并建立了 TCP 连接之后,浏览器就向万维网服务器发出浏览某个页面的请求,服务器接着就返回所请求的页面作为响应。

    1.2 长短连接

    • 长连接和短连接是针对运输层的,并非应用层,但是http是基于TCP的
    • 长连接就是在建立TCP的通信连接后并且完成这一次的HTTP请求信息的交互后不会立即释放连接,而是会继续保持连接状态,等待这个端口的其他http请求的使用。因为一个tcp协议最终通过主机的端口来查找应用进程,所以只有相同应用进程的HTTP请求才会复用这个长连接。并且会有一个保活时间,保活时间到了之后会关闭TCP连接
    • 而短连接在http的一次请求结束后就断开TCP连接。
    • HTTP1.1协议以后,连接默认都是长连接
    • 长连接可以在多请求的场景中使用
    • 如果一次请求就会结束就使用短连接

    1.3 使用

    在网络中使用统一资源定位符URL来查找
    应用层协议都要在URL中写明


    URL.png

    1.4 请求方式(简述)

    分别是增删改查
    POST:

    • 对服务器数据进行修改(增加)
    • 需要发送body数据,增加的数据放在body中

    DELETE:

    • 用于删除服务器资源
    • 不需要发送body数据

    PUT:

    • 修改服务器资源使用
    • 发送给服务器的数据在body中

    GET:

    • 一般用于获取资源
    • 不需要发送body数据
    • 不对服务器数据进行修改

    1.5 Request Status Code 状态码

    • 1xx:临时性消息。如:100 (继续发送)、101(正在切换协议)
    • 2xx:成功。最典型的是 200(OK)201(创建成功)
    • 3xx:重定向。如 301(永久移动)、302(暂时移动)、304(内容未改变)
    • 4xx:客户端错误。如 400(客户端请求错误)、401(认证失败)、403(被禁⽌)、404(找不到内容)
    • 5xx:服务器错误。如 500(服务器内部错误)

    2、HTTPS详解

    HTTPS是在HTTP的基础上增加了一个安全层,SSL/TLS层可以看做处在运输层和应用层中间,可以对数据进行加密后供应用层使用

    详细过程下面会说明

    3、加密算法的理解

    HTPP协议有一个致命的缺点就是不够安全,HTTP协议的信息传输完全以明文方式,不做任何加密,很容易被中间人恶意截获甚至篡改,因此需要采用加密技术对明文加密后再传输,总的来说有两种加密方式,对称加密和非对称加密,下面就分别来看。

    3.1 对称加密

    对称加密就是通信双方先约定一个接下来要使用的密钥,后续的通信中,信息发送方都使用密钥对信息加密,而信息接收方通过同样的密钥对信息解密。

    过程:

    1. 客户端在向服务端发送连接请求,服务端的确认请求连接中需要带上一个随机生成的秘钥
    2. 客户端接收到密钥后,发送信息时需要将明文通过密钥加密后再发送给服务端
    3. 服务端接收到加密后的信息后通过密钥进行解密,就可以得到信息了。

    缺点:

    • 此时并不一定安全
    • 虽然我们在后续的通信中对明文进行了加密,但是第一次约定加密方式时进行通信的密钥仍然是明文
    • 如果第一次通信就已经被拦截了,那么密钥就会泄露给中间人,中间人仍然可以解密后续所有的通信内容。

    解决:

    • 针对密钥的传递也是明文的,我们就需要在传递密钥时对密钥也进行加密,这就是非对称加密

    3.2 非对称加密

    在对称加密的第一次约定加密方式通信过程中有可能被中间人截获,中间人获取到密钥后可以自行加密解密。所以这种方式并不安全,需要使用非对称加密,为密钥的传输做一层额外的保护。

    非对称加密的一组秘钥对中,包含一个公钥和一个私钥。明文既可以用公钥加密,用私钥解密;也可以用私钥加密,用公钥解密。本文以公钥加密,私钥解密为例。

    过程:

    1. 客户端向服务端发送连接请求时,服务端先返回一个公钥
    2. 客户端收到公钥后,自己生成一个密钥,并用收到的公钥对密钥进行加密。
    3. 客户端将加密后的密钥发送给服务端,服务端使用私钥进行解密,就可以拿到密钥
    4. 此时客户端和服务端都有相同的密钥,后续就可以使用这个密钥来进行加密和解密了。
    5. 因为密钥的传输是通过公钥来加密的,而用来解密的私钥并不会传输,所以外界无法截取到私钥,也就无法破解拿到密钥了。

    缺点:

    • 这种情况还是不一定安全
    • 因为中间人虽然无法获取私钥,但是截获公钥。
    • 中间人先创建自己的公钥和私钥,当服务端给客户端发送公钥时,中间人截获后把自己的公钥发送给客户端。
    • 下次客户端返回被公钥加密后的秘钥后,中间人再次截获到就可以用自己的私钥来解密了。同时再将解密后的秘钥再用客户端的公钥加密后发送给服务端。
    • 这样就神不知鬼不觉的拿到了密钥

    解决:

    • 基于公钥被截获后,客户端会以中间人的公钥来加密造成的问题。想要解决就需要让客户端可以识别出服务器端的公钥。如果验证失败说明是中间人的公钥而不会进行通信了。
    • 但是客户端与服务端尚未进行通信,如何能够识别呢,这就需要引入第三方了,一个权威的证书颁发机构(CA)来解决。通过约定的第三方的信息就可以认证了。下面就是开始分析CA证书流程

    3.3 CA证书

    在非对称加密中仍然有可能被破解,因此需要引入第三方验证公钥。服务端通过第三方获取到证书后,向客户端发送证书,客户端也通过第三方信息验证证书就可以获取到密钥。

    证书(简化后):

    证书内容.png
    • 证书颁发机构、服务端网址、经过机构私钥加密的服务端公钥,经过机构私钥加密的证书前面
    • 证书签名是通过服务端网址等服务端的一些信息生成的
    • 这些信息会在客户端解析验证,以此确认是否被中间人攻击

    过程:

    1. 服务端发送公钥给证书颁发机构申请证书
    2. 证书颁发机构通过自己的私钥对服务端公钥进行加密,并且通过服务端网址等信息生成一个证书签名,证书签名同样经过机构的私钥加密。证书制作完成后,机构把证书发送给了服务端
    3. 当客户端向服务端请求通信时,服务端不再直接返回自己的公钥,而是把自己申请的证书返回客户端
    4. 客户端收到证书后,首先验证证书的真伪,之后取出服务端的公钥
      1. 客户端按照同样的签名规则,自己也生成一个证书签名,如果两个签名一致,说明证书是有效的。
      2. 验证成功后,再次利用机构公钥,解密出服务端的公钥
      3. 需要说明的是:各大浏览器和操作系统已经维护了所有权威证书机构的名称和公钥。因此在客户端本地就可以创建签名和解密。
    5. 客户端拿到服务端的公钥后,再对自己的密钥进行加密后发送给服务端。
    6. 最后服务端拿到加密后的公钥后,使用自己的私钥进行解密得到客户端的密钥
    7. 接下来就可以使用密钥加密通信了

    安全性分析:
    此时如果中间人自己创建证书后,截获服务端证书,并将自己的证书发给客户端,是否可以欺骗客户端呢?

    • 不可以
    • 因为证书的签名是通过服务端网址等信息生成的
    • 并且经过机构私钥加密,中间人也无法篡改
    • 所以自己创建的证书是无法通过客户端的验证的

    4、SSL协议工作原理

    SSL协议其实就是使用了上面分析的对称加密和非对称加密的的一种协议。处于运输层以上,应用层以下,用来做一层安全防护(当然其实是逻辑的一层,并不是真实的)

    原理: 先通过非对称加密方式约定好密钥,之后再通过对称加密方式使用密钥对明文加密传输数据

    SSL层所在位置.png

    加密过程:

    SSL协议加密过程.png

    说明:

    1. 分为两个情况,第一个是SSL握手,第二个是实际的数据传输
    2. SSL握手是通过非对称加密来实现的
    3. 实际的数据传输需要使用对称加密来传输的

    SSL握手:

    SSL握手.png

    说明:

    1、客户机发送一条“客户机hello”消息。消息里包括了客户机的SSL版本号、密码设置、会话相关数据以及其他信息。
    2、服务器发送一条“服务器hello”响应消息。消息里包括了服务器的SSL版本号、密码设置、会话相关数据、带有公钥的SSL证书以及其他信息。
    3、客户机从CA(Certificate Authority/证书颁发机构)验证服务器的SSL证书,并对服务器进行身份验证。如果身份验证失败,则客户机拒绝SSL连接并抛出异常。如果身份验证成功,则继续执行步骤4。
    4、客户机创建一个会话密钥,用服务器的公钥加密它并将其发送到服务器。如果服务器请求验证客户机身份(主要是在服务器到服务器通信中),则客户机将自己的证书发送给服务器。
    5、服务器使用其私钥解密会话密钥,并将确认消息(使用会话密钥加密)发送给客户机。
    6、在SSL握手结束时,客户机和服务器都有一个有效的会话密钥,它们将使用该密钥加密或解密实际数据。此后将不再使用公钥和私钥。

    数据传输:

    加密会话.png

    说明:

    1. 客户机和服务器现在使用共享的会话密钥对实际的传输数据进行加密和解密,这里使用的是对称加密,对称加密的优点是简单,消耗资源少。
    2. 因此,SSL基本上使用非对称加密和对称加密。在现实生活中,实现SSL通信涉及到某些基础设施,这些基础设施称为公钥基础设施。

    5、HTTP和HTTPS的区别

    • 根本区别在于HTTPS在HTTP的基础上对数据进行了加密,通过SSL/TLS协议来进行加密
    • SSL/TLS可以视作一层处在运输层和应用层之间,而HTTPS比HTTP多了这么一层进行安全加密

    相关文章

      网友评论

          本文标题:HTTP和HTTPS的简单认识和区别以及HTTPS的加密过程

          本文链接:https://www.haomeiwen.com/subject/sjzvfrtx.html