一文教你了解SSL协议「建议收藏」

一文教你了解SSL协议「建议收藏」什么是SSL简称是SSL,全称SecureSocketsLayer安全套接字协议,一般我们在学习SSL的时候,都会和TLS一起来学习的,为什么呢?因为SSL和TLS都是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层与应用层之间对网络连接进行加密。我们先看SSL协议,然后在看TLS协议。SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层: SSL记录协议(SSLRecordProtocol)

大家好,又见面了,我是你们的朋友全栈君。

什么是SSL

简称是SSL,全称Secure Sockets Layer 安全套接字协议,一般我们在学习 SSL 的时候,都会和 TLS一起来学习的,为什么呢?因为 SSL 和 TLS 都是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层与应用层之间对网络连接进行加密。

我们先看 SSL协议,然后在看 TLS协议。

SSL协议位于 TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持。SSL 协议可分为两层:

  • SSL记录协议(SSL Record Protocol):

它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。

  • SSL握手协议(SSL Handshake Protocol):

它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

要说 SSL 协议我们先来看看结构,

一文教你了解SSL协议「建议收藏」

SSL的体系结构中包含两个协议子层,其中底层是

  • SSL记录协议层(SSL Record Protocol Layer);

  • 高层是SSL握手协议层(SSL HandShake Protocol Layer)

SSL记录协议层的作用是为高层协议提供基本的安全服务的,而SSL握手协议层是用于SSL管理信息的交换,允许应用协议传送数据之间相互验证,协商加密算法和生成密钥的。

SSL的工作过程

SSL 的工作过程实际上是分为了两个部分,一个是发送,而另一个就是接收,每个部分所处理的事情也是不一样的,毕竟一个是发送一个是接收。

发送过程:

(1)从上层接受要发送的数据(包括各种消息和数据);

(2)对信息进行分段,分成若干记录;

(3)使用指定的压缩算法进行数据压缩;

(4)使用指定的MAC算法生成MAC;

(5)使用指定的加密算法进行数据加密;

(6)添加SSL记录协议的头,发送数据。

到了这个位置,发送过程就已经结束,接下来就是接收的过程了。

接收过程:

(1)接收数据,从SSL记录协议的头中获取相关信息;

(2)使用指定的解密算法解密数据;

(3)使用指定的MAC算法校验MAC;

(4)使用压缩算法对数据解压缩(在需要进行);

(5)将记录进行数据重组;

(6)将数据发送给高层。

(7)SSL记录协议处理的最后一个步骤是附加一个SSL记录协议的头,以便构成一个SSL记录。SSL记录协议头中包含了SSL记录协议的若干控制信息。

如果面试官问你,简述SSL的工作流程?

如果你这么说,感觉就不是那么的给力,你这时候就可以给他区分一下了,就是服务器认证阶段,和用户认证的阶段了。

服务器认证阶段:

(1)客户端向服务器发送一个开始信息“Hello”以便开始一个新的会话连接;

(2)服务器根据客户的信息确定是否需要生成新的主密钥,如需要则服务器在响应客户的“Hello”信息时将包含生成主密钥所需的信息;

(3)客户根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器;

(4)服务器恢复该主密钥,并返回给客户一个用主密钥认证的信息,以此让客户认证服务器。

用户认证阶段:

在此之前,服务器已经通过了客户认证,这一阶段主要完成对客户的认证。经认证的 服务器发送一个提问给客户,客户则返回(数字)签名后的提问和其公开密钥,从而向服务器提供认证。

把这玩意给面试官一说,没啥毛病吧。

SSL 的加密方式

说到加密,这就有点深入了,加密算法主要分为了两大类。

一文教你了解SSL协议「建议收藏」

第一类:

对称加密

第二类:

非对称加密

什么事对称加密呢?

对称式加密实际上就是加密和解密使用同一个密钥,通常称之为“Session Key ”这种加密技术在当今被广泛采用,如美国政府所采用的DES加密标准就是一种典型的“对称式”加密法,它的Session Key长度为56bits。

而非对称加密就稍微复杂了,

非对称式加密就是加密和解密所使用的不是同一个密钥,通常有两个密钥,称为“公钥”和“私钥”,它们两个必需配对使用,否则不能打开加密文件。这里的“公钥”是指可以对外公布的,“私钥”则不能,只能由持有人一个人知道。它的优越性就在这里,因为对称式的加密方法如果是在网络上传输加密文件就很难不把密钥告诉对方,不管用什么方法都有可能被别人窃听到。而非对称式的加密方法有两个密钥,且其中的“公钥”是可以公开的,也就不怕别人知道,收件人解密时只要用自己的私钥即可以,这样就很好地避免了密钥的传输安全性问题。

如果使用的话,各位想怎么是用呢?

根据刚才阿粉说的服务器认证和用户认证了,那么就继续来分析一下这个过程中 SSL 是如何加密的。

简单说:(1)认证服务器 (2)协商会话秘钥 (3)加密传输

但是如果你敢这么说,你会被锤死。

强制在分解一下:

第一步:客户端给出支持SSL协议版本号,一个客户端随机数(Client random,请注意这是第一个随机数),客户端支持的加密方法等信息;

第二步:服务端收到信息后,确认双方使用的加密方法,并返回数字证书,一个服务器生成的随机数(Server random,注意这是第二个随机数)等信息;

第三步:客户端确认数字证书的有效性,然后生成一个新的随机数(Premaster secret),然后使用数字证书中的公钥,加密这个随机数,发给服务端。

第四步:服务端使用自己的私钥,获取客户端发来的随机数(即Premaster secret);(第三、四步就是非对称加密的过程了)

第五步:客户端和服务端通过约定的加密方法(通常是AES算法),使用前面三个随机数,生成对话密钥,用来加密接下来的通信内容;

这是不是就完成了呢?你学会了么?

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/138583.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • sublime text2 安装及使用教程

    sublime text2 安装及使用教程1.下载安装包地址:https://www.sublimetext.com/22.安装,一直点下一步就好,将下列选项打钩,这样文件右键就可以直接用sublimetext2打开3.新建一个html

    2022年7月1日
    17
  • 几种 IO编程比较

    几种 IO编程比较参考:Netty权威指南第一版Java网络IO编程总结(BIO、NIO、AIO均含完整实例代码)1.传统的BIO模型通常由一个独立的Acceptor线程负责监听客户端的连接,它接收到客户端连接请求之后为每个客户端创建一个新的线程进行处理,处理完之后,通过流返回应答给客户端,线程销毁。这就是典型的—请求—应答通信模型。该模型最大的问题就是缺乏弹性伸缩能力,当客户端并发量增加后,服务端的线程

    2022年4月30日
    40
  • oracle 拉链表算法,拉链表设计算法「建议收藏」

    oracle 拉链表算法,拉链表设计算法「建议收藏」在企业中,由于有些流水表每日有几千万条记录,数据仓库保存5年数据的话很容易不堪重负,因此可以使用拉链表的算法来节省存储空间。1.采集当日全量数据存储到ND(当日)表中。2.可从历史表中取出昨日全量数据存储到OD(上日数据)表中。3.用ND-OD为当日新增和变化的数据(即日增量数据)。两个表进行全字段比较,将结果记录到tabel_I表中4.用OD-ND为状态到此结束需要封链的数据。(需要修改…

    2022年10月10日
    2
  • vhdl testbench实例_支持veriloghdl的工具及获取方法

    vhdl testbench实例_支持veriloghdl的工具及获取方法VHDL与VerilogHDL的Testbench模板一般而言,一个testbench需要包含的部分如下:(1)VHDL:entity和architecture的声明;Verilog:moduledeclaration(2)信号声明(3)实例化待测试文件(4)提供仿真激励其中第(4)步是关键所在,需要完成产生时钟信号,以及提供激励信号两个任务。VHDLTestbench中产生…

    2022年9月16日
    3
  • Lucene全文检索工具包学习笔记总结

    Lucene全文检索工具包学习笔记总结

    2021年7月10日
    59
  • Linux 的 history 命令使用大全

    Linux 的 history 命令使用大全history命令history命令:用于显示历史记录和执行过的指令命令。history命令读取历史命令文件中的目录到历史命令缓冲区和将历史命令缓冲区中的目录写入命令文件。该命令单独使用时,仅显示历

    2022年7月4日
    23

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号