小知识——SSL介绍
【本文介绍SSL基础理论知识】
一、SSL概念介绍
SSL(Secure Sockets Layer ,安全套接层)及其继任者TLS(Transport Layer Security,传输层安全)是为网络通信提供安全及数据完整性的一种安全协议,TLS与SSL在传输层对网络连接进行加密。SSL有部署简单(已集成到大部分浏览器中)、支持各种应用层协议等优点。提供的服务有:
- 认证用户及服务器以确保数据发送到正确的地方。
SSL利用数字签名来验证通信对端的身份。 - 使用加密通道加密数据防止窃取。
发送方在发送数据前,使用加密算法和加***对数据进行加密,接收方接收到数据后,利用解密算法和解***从密文中获取明文。加解密算法分为两类:对称**算法(数据加密和解密时使用同样的**)、非对称**算法(数据加密和解密使用不同的**,一个是公开的公钥,一个是由用户秘密保存的私钥)。对称**算法具有计算速度快的优点,通常用于对大量信息进行加密(如对全部报文加密);而非对称**算法,一般用于数字签名和对较少的信息进行加密。
SSL加密通道使用对称**算法;而对加密通道中使用的密匙,SSL使用非对称**算法确保该密匙本身的安全。 - 确保数据完整性防止数据在传输过程中被修改。
SSL利用基于MD5或SHA的MAC算法来保证消息的完整性。MAC算法是在**參与下的数据摘要算法,能将**和随意长度的数据转换为固定长度的数据。需注意:1、消息的不论什么改变,都会引起输出的固定长度数据产生变化。通过比较MAC值,可以保证接收者可以发现消息的改变;2、MAC算法须要**的參与,因此没有**的非法用户在改变消息的内容后,无法加入正确的MAC值。从而保证非法用户无法任意改动消息内容。
SSL是位于应用层(HTTP、FTP等协议)和传输层(TCP等协议)之间的协议层,应用层数据不再直接传递给传输层,而是先交给SSL加密。SSL协议本身又分为两层,如下图所示,上层为SSL握手协议(SSL handshake protocol)、SSLpassword变化协议(SSL change cipher spec protocol)和SSL警告协议(SSL alert protocol),底层为SSL记录协议(SSL record protocol)。
二、工作原理
1、密匙安全
SSL加密通道使用对称算法,SSL使用非对称算法来保证加密通道中对称算法中的密匙的安全性,同时使用非对称算法保证MAC密匙的安全性,利用PKI保证非对称算法中的公匙的安全性。如下图所示,使用非对称算法加密对称算法中的密匙:
利用非对称**算法加***之前,发送者须要获取接收者的公钥,并保证该公钥确实属于接收者。PKI通过数字证书(该证书包括一个用户公匙及其身份信息文件)来公布用户的公钥,证明了用户与公钥的关联。数字证书由权威机构——CA签发,并由CA保证数字证书的真实性。SSLclient把**加密传递给SSLserver之前,SSLserver须要将从CA获取的证书发送给SSLclient,SSLclient通过PKI推断该证书的真实性。假设该证书确实属于SSLserver,则利用该证书中的公钥加***,发送给SSLserver。
2、握手协议
握手协议用来协商通信过程中使用的加密套件(加密算法、**交换算法和MAC算法等)、在server和client之间安全地交换**、实现server和client的身份验证。每个握手协议包含3个字段:Type、Length、Content。下面分别描述下面三种情况下的握手过程:仅仅验证server的握手过程、验证server和client的握手过程、恢复原有会话的握手过程。
a)、仅仅验证server的握手过程
- SSLclient通过Client Hello消息将它支持的SSL版本号、加密算法、**交换算法、MAC算法等信息发送给SSLserver。
- SSLserver确定本次通信采用的SSL版本号和加密套件,并通过Server Hello消息通知给SSLclient。假设SSLserver同意SSLclient在以后的通信中重用本次会话,则SSLserver会为本次会话分配会话ID。并通过Server Hello消息发送给SSLclient。
- SSLserver将携带自己公钥信息的数字证书通过Certificate消息发送给SSLclient。
- SSLserver发送Server Hello Done消息。通知SSLclient版本号和加密套件协商结束。开始进行**交换。
- SSLclient验证SSLserver的证书合法后,利用证书中的公钥加密SSLclient随机生成的premaster secret,并通过Client Key Exchange消息发送给SSLserver。
- SSLclient发送Change Cipher Spec消息,通知SSLserver报文将采用协商好的**和加密套件进行加密和MAC计算。
- SSLclient计算已交互的握手消息(除Change Cipher Spec消息外全部已交互的消息)的Hash值,利用协商好的**和加密套件处理Hash值(计算并加入MAC值、加密等),并通过Finished消息发送给SSLserver。SSLserver利用相同的方法计算已交互的握手消息的Hash值,并与Finished消息的解密结果比较,假设二者相同,且MAC值验证成功,则证明**和加密套件协商成功。
- 相同地。SSLserver发送Change Cipher Spec消息,通知SSLclient报文将采用协商好的**和加密套件进行加密和MAC计算。
- SSLserver计算已交互的握手消息的Hash值,利用协商好的**和加密套件处理Hash值(计算并加入MAC值、加密等),并通过Finished消息发送给SSLclient。SSLclient利用相同的方法计算已交互的握手消息的Hash值,并与Finished消息的解密结果比较,假设二者相同。且MAC值验证成功。则证明**和加密套件协商成功。
SSLclient接收到SSLserver发送的Finished消息后。假设解密成功,则能够推断SSLserver是数字证书的拥有者,即SSLserver身份验证成功,由于仅仅拥有私钥的SSLserver才能从Client Key Exchange消息中解密得到premaster secret,从而间接地实现了SSLclient对SSLserver的身份验证。 Change Cipher Spec消息属于SSLpassword变化协议,其它握手过程交互的消息均属于SSL握手协议。
b)、验证server和client的握手过程
多了如下操作:
- SSLserver发送Certificate Request消息。请求SSLclient将其证书发送给SSLserver。
- SSLclient通过Certificate消息将携带自己公钥的证书发送给SSLserver。SSLserver验证该证书的合法性。
- SSLclient计算已交互的握手消息、主**的Hash值。利用自己的私钥对其进行加密,并通过Certificate Verify消息发送给SSLserver。
- SSLserver计算已交互的握手消息、主**的Hash值。利用SSLclient证书中的公钥解密Certificate Verify消息,并将解密结果与计算出的Hash值比较。假设二者同样,则SSLclient身份验证成功。
c)、恢复原有会话的握手过程
协商会话參数、建立会话的过程中,须要使用非对称**算法来加***、验证通信对端的身份。这个过程计算量较大,占用了大量的系统资源。为了简化SSL握手过程,SSL同意重用已经协商过的会话。
- SSLclient发送Client Hello消息,消息中的会话ID设置为计划重用的会话的ID。
- SSLserver假设同意重用该会话,则通过在Server Hello消息中设置同样的会话ID来应答。这样,SSLclient和SSLserver就能够利用原有会话的**和加密套件,不必又一次协商。
3、记录协议
记录协议在握手成功后使用,即SSLclient和SSLserver鉴别对方和确定安全信息交换使用的算法后,进入SSL记录协议,记录协议向SSL连接提供两个服务:
- 保密性:使用握手协议定义的秘***实现
- 完整性:握手协议定义了MAC,用于保证消息完整性
附录:
常见英文缩略词
缩略词 | 英文全称 | 中文 | 缩略词 | 英文全称 | 中文 |
---|---|---|---|---|---|
AES | Advanced Encryption Standard | 高级加密标准 | CA | Certificate Authority | 证书机构 |
DES | Data Encryption Standard | 数据加密标准 | HTTPS | Hypertext Transfer Protocol Secure | 安全超文本传输协议 |
MAC | Message Authentication Code | 消息验证码 | MD5 | Message Digest 5 | 消息摘要算法5 |
PKI | Public Key Infrastructure | 公钥基础设施 | RSA | Rivest Shamir and Adleman | 非对称**算法的一种 |
SHA | Secure Hash Algorithm | 安全散列算法 | SSL | Secure Sockets Layer | 安全套接层 |
v*n | Virtual Private Network | 虚拟专有网络 |
参考链接:
https://www.cnblogs.com/bhlsheji/p/4586597.html
https://blog.****.net/shipfsh_sh/article/details/80419994