图说TCP/IP协议(2):SSL/TLS数据传输的安全保障--身份认证、非对称加密、对称加密和完整性保证

    在网络中传输数据时,为了防止数据被人窃听,会对数据进行加密;为了防止数据被篡改,会对数据做完整性保证。而对数据的加密,我们又会涉及到对称加密和非对称加密。另外还有很重要的的一点就是,如何确认通信双方的身份是可信任的。下面我们分开讨论。

1. SSL/TLS如何保证双方的身份是可信任的

1.1 单证

    SSL/TLS客户端为了保证与自己通信的服务器是真实的,而不是中间人冒充的,往往需要服务器提供证书,采用PKI体系来验证服务器身份的真实性。报文如下:

    可以看到单证时,报文交换如下:

    (1) Server --> Client:Server Certificate。

1.2 双证

    同样的服务器也会对客户端的身份进行认证,一般由SSL/TLS上层协议来完成,可以要求客户端提供账号、密码来做身份验证,具体看上层协议的实现。当然SSL/TLS协议本身也可以要求客户端提供证书来完成,这就是我们所说的双证。报文如下:

    可以看到双证时,报文交换如下:

    (1) Server --> Client:Server Certificate & Client Certificate Request,

    (2) Client --> Server:Client Certificate & Certificate Verify 。

 1.3 PKI体系认证过程

    当客户端拿到服务器证书时候,怎么判断服务器是否可信。同样地,服务器拿到客户端证书后,怎么判断客户端是否可信。详细请看文档身份认证

2. SSL/TLS如何保证数据不被窃取

    为了防止数据在网络传输中被外界知晓,因此我们会对这些数据进行加密处理。而加密的方式一般有两者,对称加密和非对称加密。

2.1 两种加密方式优缺点对比

  对称加密 非对称加密
是否使用同样密钥 加密和解密使用同样的密钥 加密和解密使用不同的密钥,如果加密用公钥,那么解密用私钥;如果加密用私钥,那么解密用公钥
数据安全性 数据的安全性取决于加密算法和密钥的长度,没有非对称加密安全 公钥是对外可见的,因此数据的安全性,取决于私钥,不被外部获取,比对称加密安全
加解密速度 加解密速度快,适合加解密大量的数据 加解密速度慢,适用于加解密少量的数据,如果私钥长度从1024bit增加到2048bit,性能会变成原来的1/6---1/7
常用算法举例 DES、3DES、AES RSA

2.2 SSL/TLS对两种加密方式的利用    

    由于对称加密和非对称加密各有优缺点,因此SSL/TLS各取所长,利用非对称加密SSL/TLS握手过程中的中间数据,利用非对称加密真正传输的数据。在加密之前,我们需要双方支持相同的加密算法,无论是对称加密算法还是非对称加密算法。

    SSL/TLS客户端通过Client Hello把客户端支持的对称加密算法和非对称加密算法都发给服务器,服务器收到后,从中找出自己支持的最优的对称加密算法和非对称加密算法,通过Server Hello发给客户端,这样双方就都支持相同的对称加密算法和非对称加密算法。算法协商好了,后面还剩下两个问题。

    一是,针对非对称加密,我们需要公钥持有方把公钥给到接收方。

    SSL/TLS在Client Hello和Server Hello后,服务器就立即把自己证书给客户端,而证书里面包含了公钥,所以这点不是问题。证书交换完成后,客户端如果要传输数据【这里的数据一般是对称密钥的种子参数,后文会讲】给服务器,用服务器公钥加密,因为只有服务器有私钥,所以别人无法解密。

    二是,针对对称加密,我们需要双方能够产生一模一样的密码,而该密码,只有通讯双方知道。

    SSL/TLS采用了密钥交换算法来完成,详细见对称加密密钥的形成

    不过由于密钥交换算法不止一种,因此在这之前,我们需要双方协商一个都支持的密钥交换算法,SSL/TLS也是通过Client Hello和Server Hello完成的。

3. SSL/TLS如何保证数据不被篡改

    SSL/TLS是通过以下过程来完成数据传输被篡改的问题。

      1)Client --> Server:Client Encrypted Handshake Message

      2)Server--> Client:Server Encrypted Handshake Message

3.1 客户端发给服务器数据的完整性保证

    客户端先对SSL/TLS握手过程中发送给服务器的数据做哈希,然后PRF,最后再用握手中产生的对称密钥加密,进而产生Client Encrypted Handshake Message,发给服务器。

    服务器收到Client Encrypted Handshake Message后,也会模拟客户端对握手中的收到的客户端数据先哈希、再PRF、最后加密得到一个数据Client_Data。

    服务器比较Client_Data和Client Encrypted Handshake Message,如果一样,客户端发给服务器的数据没有被篡改,继续下一步,否则握手失败,通知TCP关闭连接。

3.2 服务器发给客户端数据的完整性保证

    接下来,服务器对发给客户端的数据做哈希,然后PRF、最后加密,形成Server Encrypted Handshake Message,发给客户端。

    客户端收到Server Encrypted Handshake Message后,同样的方式,模拟服务器对握手中收到的服务器数据哈希、PRF、加密得到书Server_Data。

    客户端比较Server_Data和Server Encrypted Handshake Message,如果一样,服务器发给客户端书没有被篡改,开始真正的数据传输,否则握手失败,通知TCP关闭连接。

猜你喜欢

转载自blog.csdn.net/Wendy019900107/article/details/89818280