您的当前位置:首页正文

认识SSL

2024-11-23 来源:个人技术集锦

一、SSL简介

SSL中文名为安全套接字层(Secure Sockets Layer),现如今是应用最广泛的数据加密协议,该协议是由网景公司在90年代设计的主要用于Web的安全传输协议。该协议历经了三个版本,分别是SSL1.0、SSL2.0、SSL3.0。直到IETF将SSL进行了标准化,并将其称为TLS(Transport Layer Security)传输层安全。严格来说TLS(传输层安全)是更为安全的升级版 SSL,而现在用的也基本是TLS协议。但是由于SSL这一术语更为常用,因此我们仍然将我们的安全证书称作 SSL或者SSL/TLS。到现在TLS也已经经历了四个版本,分别是TLS1.0,TLS1.1(2006),TLS1.2(2008),TLS1.3(2018)。

1.1 非对称加密算法

所谓的“非对称加密技术”,意思就是说:“加密”和“解密”使用不同的密钥 即每个用户都有两把钥匙,一把公钥一把私钥。公钥是对外发布的,所有人都看的到所有人的公钥,私钥是自己保存,每个人都只知道自己的私钥而不知道别人的。用该用户的公钥加密后只能该用户的私钥才能解密。这种情况下,公钥是用来加密信息的,确保只有特定的人(用谁的公钥就是谁)才能解密该信息。 第二种情况,公钥是用来解密信息的,确保让别人知道这条信息是真的由我发布的,是完整正确的。接收者由此可知这条信息确实来自于拥有私钥的某人,这被称作数字签名,公钥的形式就是数字证书

1.2 对称加密算法

所谓的“对称加密技术”比较简单,意思就是说:“加密”和“解密”使用相同的密钥。就好比你用 7zip 或 WinRAR 创建一个带密码(口令)的加密压缩包。当你下次要把这个压缩文件解开的时候,你需要输入同样的密码。在这个例子中,密码/口令就如同刚才说的密钥

1.3  特点

• SSL可对传输的数据进行加密,防止第三方窃取数据

• SSL协议具有防篡改机制,如果传输的数据在传输过程中被人篡改,通信双方就会立刻发现

•  SSL也具有身份验证机制,防止身份被人冒充

1.4 SSL在TCP/IP模型中的位置

二、. 基本运行过程

SSL/TLS协议基本思路是采用的非对称加密算法,客户端先向服务器请求公钥,然后再用公钥进行数据加密,服务器接收到密文之后,再用自己的私钥解密。

• 1.客户端向服务器端索要并验证公钥

• 2.双方协商生成“对话密钥”

• 3.双方采用“对话密钥”进行加密通信

从上面的简要过程可以看出,我们还使用了对称加密算法,这是因为,如果客户端与服务器的每一次会话都使用公钥进行加密运算,由于公钥加密的计算量是非常大的,因此为了减少这个加密计算消耗的时间,我们对交互数据使用对称加密算法(时间消耗相比于非对称算法少很多),我们只需要使用在最开始的公钥加密算法获取服务器给的对称加密算法的对话密钥,接下来的数据交互使用对话密钥进行加解密就行了。

而上面的1和2我们又将其称之为"握手阶段" 握手阶段客户端与服务器之间存在四次通信,且通信的数据都是明文传输的

2.1客户端请求

客户端向服务器发出需要加密通信的请求,这一步叫做ClientHello请求 客户端提供的信息如下

信息

客户端支持的TLS协议版本

客户端生成一个随机数,用于后续生成“对话密钥”

客户端支持的加密方法,比如DHE-RSA非对称加密算法

支持的压缩算法

2.2 服务器回应

信息

确认需要使用的TLS协议版本

服务器也会生成一个随机数,用于后续生成“对话密钥”

确认使用的加密算法,比如DHE-RSA非对称加密算法

服务器的证书

如果服务器需要确认客户端的身份,就会包含一个证书请求,要求客户端提供客户端证书确认身份

2.3客户端再回应

客户端得到响应之后,先验证服务器的证书,如果有问题,就会向用户提示警告是否继续访问,如果没有问题,客户端就取出证书中的公钥,然后向服务器发送以下数据

信息

发送一个用公钥加密的随机数数据,这个随机数也被称为pre-master key

编码更改通知,告诉服务器以后的数据都将采用已商定的加密方法和密钥发送

客户端握手结束通知,这一项同时也是前面发送的所有内容的hash值,用来提供给服务器做防篡改验证

到这里,我们可能会有疑问,为什么一定要用三个随机数来生成会话密钥,原因如下:

不管是客户端还是服务器,都需要随机数,这样生成的密钥才不会每次都一样。由于SSL协议中证书是静态的,因此十分有必要引入一种随机因素来保证协商出来的密钥的随机性。
对于RSA密钥交换算法来说,pre-master-key本身就是一个随机数,再加上hello消息中的随机,三个随机数通过**一个密钥导出器最终导出一个对称密钥**。
pre master的存在在于SSL协议不信任每个主机都能产生完全随机的随机数,如果随机数不随机,那么pre master secret就有可能被猜出来,那么仅适用pre master secret作为密钥就不合适了,因此必须引入新的随机因素,那么客户端和服务器加上pre master secret三个随机数一同生成的密钥就不容易被猜出了,一个伪随机可能完全不随机,可是是三个伪随机就十分接近随机了,每增加一个自由度,随机性增加的可不是一。"

2.4服务器最后的回应

服务器收到客户端的第三个随机数pre-master key之后,计算生成本次会话所用的"会话密钥"

信息

编码更改通知,告诉服务器以后的数据都将采用已商定的加密方法和密钥发送

服务器握手结束通知,这一项同时也是前面发送的所有内容的hash值,用来提供给客户端做数据防篡改验证

到这里,整个握手阶段全部结束,之后,客户端就可以与服务器进行加密通信了,对数据使用“会话密钥”做对称加密。

显示全文