
SSL是HTTP协议和TCP之间的可选层,其位置大致如下

ssl location.png
SSL: 由Netscape开发的用于保护Internet上数据传输安全的SSL(安全套接字层),它使用数据加密(Encryption)技术来确保网络上数据的传输过程不会被截获. 当前版本是3.0. 它已被广泛用于Web浏览器和服务器之间的身份认证和加密数据传输.
SSL协议位于TCP / IP协议与各种应用程序层协议之间,为数据通信提供安全支持.
SSL协议可以分为两层:
TLS : (传输层安全性)用于在两个应用程序之间提供机密性和数据完整性.
TLS 1.0是由IETF(Internet工程任务组,Internet工程任务组)开发的新协议. 它建立在SSL 3.0协议规范的基础上,是SSL 3.0的后续版本,可以理解为SSL 3.1. 它是用RFC编写的.
协议包括两层:
SSL / TLS协议提供的服务主要包括:

对用户和服务器进行身份验证,以确保将数据发送到正确的客户端和服务器;加密数据以防止数据在中途被盗;维护数据完整性,并确保数据在传输过程中不会发生变化
CipherList(CipherList)是服务器和客户端在SSL通信中使用的加密算法的组合.
版本号: TLS记录格式与SSL记录格式相同,但是版本号的值不同. TLS版本1.0使用的版本号是SSLv3.1. 消息认证码伪随机函数告警码密文族和客户端证书certificate_verify并完成消息加密计算填充
TLS的主要增强功能
TLS的主要目标是使SSL更加安全,并使协议规范更加精确和完整. TLS基于SSL v3.0提供了以下增强功能:
更安全的MAC算法和更严格的警报的“灰色区域”规范的更安全定义
由于非对称加密的速度相对较慢,因此通常用于密钥交换. 双方通过公钥算法协商密钥,然后通过对称加密进行通信. 当然,为了确保数据的完整性,在加密之前ssl认证,必须由HMAC处理.
默认情况下,SSL仅执行服务器端身份验证,客户端身份验证是可选的

SSL.png

受支持的协议版本,例如由TLS版本1.0中的客户端生成的随机数random_C,将稍后用于生成“会话密钥”支持的加密方法,例如RSA公钥加密支持的压缩方法. (密码套件)所使用的加密通信协议的版本,例如TLS 1.0. 如果浏览器和服务器支持的版本不一致ssl认证,则服务器将关闭加密通信. 服务器生成的随机数random_S稍后用于生成“会话密钥”以确认所使用的加密方法,例如RSA公钥加密服务器证书
注意: 当服务器发送给客户端的证书没有提供足够的信息(证书公钥)时,您也可以将服务器密钥交换发送给客户端. 此外,对于非常重要的机密数据,服务器还需要验证客户端,以确保将数据传输到安全合法的客户端. 服务器可以向客户端发送Cerficate Request消息,请求客户端发送证书以验证客户端的合法性.
最后,服务器将向客户端发送服务器已完成消息,表明服务器已结束消息.
1. 客户端密钥交换: 首先,需要将客户端的证书发送到服务器,以允许服务器验证客户端的合法性.
2. 证书验证: 客户端需要检查服务器的证书. 如果证书不是由受信任的机构颁发的,或者证书中的域名与实际域名不一致,或者证书已过期,则会向访问者显示警告. 由他们决定是否继续通信. 如果证书没有问题,则客户端将从服务器证书中取出服务器的公钥. 然后,将以下三个信息发送到服务器:
一个随机数. 使用服务器的公共密钥对随机数进行加密,以防止(生成48字节的密钥,并且客户端使用某种加密算法(例如RSA,Diffie-Hellman)来生成48字节的PreMaster Secret.
**此时,客户端已获得计算协商密钥所需的所有信息: 两个明文随机数random_C和random_S以及它们自己生成的Pre-master,并且计算了协商密钥: **
master_secret =PRF(pre_master_secret, "master secret", ClientHello.random +ServerHello.random)
pre_master_secret就是我们之前传送的随机密码串,”mastersecret”是一串ASCII码,再加上之前提到的random1和random2。PRF是在规范中约定的伪随机函数,它将密钥、ASCII码标签、哈希值整合在一起。各有一半的参数分别使用MD5和SHA-1获取哈希值。这是一种十分明智的做法,即使是想要单单破解相对简单MD5和SHA-1也不是那么容易的事情。而且这个函数会将返回值传给自身直至迭代到我们需要的位数
客户端得到master_secret后,根据协议约定,我们需要利用PRF生成这个会话中所需要的各种密钥,称之为“密钥块”(key block)
代码更改通知,指示将使用双方同意的加密方法和密钥发送后续信息(ChangeCipherSpec是一个独立的协议,反映在数据包中是一个字节的数据,用于通知服务器,客户终端已切换到先前协商的密码套件(Cipher Suite)状态,并准备使用先前协商的密码套件对数据进行加密和传输
有关客户端握手结束的通知,表示客户端的握手阶段已结束. 此项目也是之前发送的所有内容的哈希值,用于服务器验证(在ChangecipherSpec传输完成之后,客户端将使用先前协商的加密套件和会话密钥将一段Finish数据加密到服务器,这数据用于在正式传输应用程序数据之前验证刚刚通过握手建立的加密和解密通道.

使用私钥根据之前交换的两个明文随机数random_C和random_S解密加密的Pre-Master数据,计算协商密钥: enc_key = Fuc(random_C,random_S,Pre-Master);信息的哈希值,然后解密客户端发送的encrypted_handshake_message消息,以验证数据和密钥的正确性;发送一个ChangeCipherSpec(通知客户端它已切换到协商的密码套件状态,准备使用密码套件和会话密钥来加密数据)服务. 客户端还将使用会话密钥来加密完成消息并将其发送到客户验证握手建立的加密和解密通道是否成功.
根据之前的握手信息,如果客户端和服务器都可以正常加密和解密Finish信息,并且消息已正确验证,则表示握手通道已成功建立. 接下来,双方都可以使用“会话机密”对数据进行加密和传输.
1. PreMaster的秘密
PreMaster Secret是使用诸如RSA或Diffie-Hellman之类的加密算法在客户端上生成的. 它将用于生成主密钥以及服务器和客户端在Hello阶段生成的随机数. PreMaster机密的前两个字节是TLS版本号,这是用于检查握手数据的重要版本号. 服务器需要将密文中解密的PreMaster的版本号与先前的Client Hello阶段的版本号进行比较. 如果版本号降低,则表明它已被序列化,它将立即停止发送任何消息.
2. 最高机密
如上所述,由于服务器和客户端都具有相同的PreMaster机密和随机数,因此该随机数将用作以后生成主机密的. 结合PreMaster机密,客户端和服务器将计算相同的Master机密.
主密钥由一系列哈希值组成,这些哈希值将用作与数据加密和解密有关的密钥的关键材料的一部分. 关键材料最终将数据解析如下:

MasterSecret.png
所有握手阶段完成后,您可以开始传输应用程序数据. 在传输应用程序数据之前,必须首先附加MAC机密,然后使用写入加密密钥对数据包进行加密. 服务器收到密文后,使用客户端写加密密钥解密,客户端从服务器接收到数据后,使用服务器写加密密钥解密,然后使用各自的写MAC密钥验证数据完整性. 包括序列化身份验证.

为了加快握手的建立并减少协议引起的性能下降和资源消耗(具体分析将在后面介绍),TLS协议具有两种类型的会话缓存机制:
(a)如果在客户端和服务器之间建立了连接,则服务器将在成功握手后返回会话ID,并将相应的通信参数保存在服务器中;
(b)如果客户端需要再次与服务器建立连接,则记录的信息将携带在client_hello的会话ID中并发送到服务器;
(c)服务器根据收到的会话ID检索缓存记录. 如果检索到的缓存过期,将遵循正常的握手过程;
(d)如果检索到相应的缓存记录,则返回change_cipher_spec和加密的握手消息信息. 这两个信息功能相似. cryptod_handshake_message是当前通信参数和master_secret的哈希值;
(f)如果客户端可以验证服务器加密的数据,则客户端还会发送change_cipher_spec和cryptomaned_handshake_message信息;
(g)服务器验证数据通过后,握手成功建立,并且正常的加密数据通信开始.
(a)如果在客户端和服务器之间建立了连接,则服务器将在new_session_ticket数据中携带加密的session_ticket信息,并且客户端将其保存;
(b)如果客户端需要再次与服务器建立连接,它将在client_hello的扩展字段session_ticket中携带加密信息,并将其一起发送给服务器;
(c)服务器解密sesssion_ticket数据. 如果解密失败,请遵循正常的握手过程;
(d)如果解密成功,返回change_cipher_spec和encrypted_handshake_message信息,则这两个信息功能类似于会话ID;
(f)如果客户端可以验证服务器加密的数据,则客户端还会发送change_cipher_spec和cryptomaned_handshake_message信息;
(g)服务器验证数据通过后,握手成功建立,并且正常的加密数据通信开始.
在建立TCP连接之后,SSL客户端(也是TCP客户端)发送ClientHello来发起握手. 该消息包含可以实现的算法和其他必需消息的列表. SSL服务器将响应ServerHello,该ServerHello确定此通信所需的算法,然后发送其自己的证书(该证书包含身份和其公钥). 收到此消息后,客户端将生成一个秘密消息,该消息将使用SSL服务器的公钥加密并继续传递. SSL服务器使用其自己的私钥对其解密后,会话密钥协商成功. 交流.
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-217565-1.html
加油
商会会长
让得意的人有一丝谦卑和体会生命的失意