SSL基本知识及有无客户端连接过程详解

前言:如有疑问(包括但不限于本篇,涉及网络  系统皆可),欢迎评论探讨,看见能解答必回。彼此交流,共同成长。)

一、定义

SSL:安全套接字(Secure Socket Layer)Web浏览器与Web服务器之间安全交换信息的协议。SSL/TLS介于应用层和TCP层之间。

TLS:(Transport Layer Security,传输层安全协议)。最新版本的TLS 1.0是IETF(工程任务组)制定的一种新的协议,建立在SSL3.0的基础上,两者差别极小,可理解为SSL3.1。此协议收录在RFC中。

 

二、SSL协议的三个特性:

① 保密:在握手协议中定义了会话密钥后,所有的消息都被加密。

② 鉴别:可选的客户端认证,和强制的服务器端认证。

③ 完整性:传送的消息包括消息完整性检查(使用MAC)。

 

三、SSL的工作原理,含3种协议。

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

 

1.握手协议(Handshake protocol)握手协议是客户机和服务器用SSL连接通信时使用的第一个子协议,在应用程序的数据传输之前使用。该协议允许服务器和客户机相互验证,协商加密和MAC算法以及保密密钥,用来保护在SSL记录中发送的数据。  

2.记录协议(Record protocol):在客户机和服务器握手成功后使用,即客户机和服务器鉴别对方和确定安全信息交换使用的算法后,进入SSL记录协议。

3.警报协议(Alert protocol):客户机和服务器发现错误时,向对方发送一个警报消息。如果是致命错误,则算法立即关闭SSL连接,双方还会先删除相关的会话号,秘密和密钥。每个警报消息共2个字节,第1个字节表示错误类型,如果是警报,则值为1,如果是致命错误,则值为2;第2个字节制定实际错误类型。

 

 

四、握手过程

 

1.无客户端认证的握手过程:

简图:

文字描述:

1. 客户端将它所支持的算法列表和一个用作产生密钥的随机数1发送给服务器;

2. 服务器从算法列表中选择一种加密算法,并将它和一份包含服务器公用密钥的证书发送给客户端;该证书还包含了用于认证目的的服务器标识,服务器同时还提供了一个用作产生密钥的随机数2;

3. 客户端对服务器的证书进行验证(有关验证证书,可以参考数字签名),并抽取服务器的公用密钥;然后,再产生一个称作pre_master_secret(预主密钥,也是一个随机数3)的随机密码串,并使用服务器的公用密钥对其进行加密(参考非对称加/解密),并将加密后的信息发送给服务器;

4. 客户端与服务器端根据pre_master_secret(预主密钥)以及客户端与服务器的随机数值独立计算出加密的MAC密钥(参考DH密钥交换算法)。

5. 客户端将所有握手消息的MAC值发送给服务器;表明自己开始启用此密钥来加密信息,握手可以结束了。

6. 服务器将所有握手消息的MAC值发送给客户端,告诉客户端启用成功,握手结束。

 

2.有客户端认证的握手过程:

 

 

我手绘的简图:

文字描述:

1. 客户端的浏览器向服务器传送客户端 SSL 协议的版本号,加密算法的种类,产生的随机数,以及其他服务器和客户端之间通讯所需要的各种信息。

2. 服务器向客户端传送 SSL 协议的版本号,加密算法的种类,随机数以及其他相关信息,同时服务器还将向客户端传送自己的证书。

3. 客户利用服务器传过来的信息验证服务器的合法性,服务器的合法性包括:证书是否过期,发行服务器证书的 CA 是否可靠,发行者证书的公钥能否正确解开服务器证书的“发行者的数字签名”,服务器证书上的域名是否和服务器的实际域名相匹配。如果合法性验证没有通过,通讯将断开;如果合法性验证通过,将继续进行第四步。

4. 用户端随机产生一个用于后面通讯的“对称密码”,然后用服务器的公钥(服务器的公钥从步骤②中的服务器的证书中获得)对其加密,然后将加密后的“预主密码”传给服务器。

5. 如果服务器要求客户的身份认证(在握手过程中为可选),用户可以建立一个随机数然后对其进行数据签名,将这个含有签名的随机数和客户自己的证书以及加密过的“预主密码”一起传给服务器。

6. 如果服务器要求客户的身份认证,服务器必须检验客户证书和签名随机数的合法性,具体的合法性验证过程包括:客户的证书使用日期是否有效,为客户提供证书的CA 是否可靠,发行CA 的公钥能否正确解开客户证书的发行 CA 的数字签名,检查客户的证书是否在证书废止列表(CRL)中。检验如果没有通过,通讯立刻中断;如果验证通过,服务器将用自己的私钥解开加密的“预主密码 ”,然后执行一系列步骤来产生主通讯密码(客户端也将通过同样的方法产生相同的主通讯密码)。

7. 服务器和客户端用相同的主密码即“通话密码”,一个对称密钥用于 SSL 协议的安全数据通讯的加解密通讯。同时在 SSL 通讯过程中还要完成数据通讯的完整性,防止数据通讯中的任何变化。

8. 客户端向服务器端发出信息,指明后面的数据通讯将使用的步骤⑦中的主密码为对称密钥,同时通知服务器客户端的握手过程结束。

9. 服务器向客户端发出信息,指明后面的数据通讯将使用的步骤⑦中的主密码为对称密钥,同时通知客户端服务器端的握手过程结束

 

 

 

 

 

 

 

 

 

参考博文:https://kb.cnblogs.com/page/162080/

https://blog.csdn.net/hherima/article/details/52469674

此致谢意。

发布了33 篇原创文章 · 获赞 29 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_40993864/article/details/87729935