基于MQTT协议的SSL/TLS加密传输的讨论

                        本文就MQTT到底单向加密还是双向加密做一个简单的讨论。

    到底是单项加密还是双向加密?我们要从不同的角度去分析这件事情。但是在分析之前,我们还是有必要回顾一下基础知识。 

SSL/TLS单向认证:客户端会认证服务器端身份,服务器端不对客户端进行认证 

SSL/TLS双向认证:客户端和服务端都会互相认证,即双发之间要证书交换 

不难看出,从复杂性角度上讲,单向认证只需要认证服务器,对于客户端并不要求,相当于双向加密,较为省时省事。

但是,从安全性角度上看,双向加密相对安全。但是为什么说实习相对的呢?虽然ssl在认证结束后传输数据还会对数据进行对

称加密,提高了**难度,但仍旧存在**隐患。所以对称加密的**长度足够长,例如使用128位加密,就会大大增加**

难度。然而,也仅仅是增加了**难度,并不是有效的防止。如果传输的是一些相对机密数据,仍然不能保证安全性。因此,这

里也是相对的安全。所以,ssl只是暂时解决了通讯层的安全,应用层一般还会增加一层认证防护。

因此,对于这一层的加密,从黑客的角度上而言,数据是否值得去**,如果不值得,那么这种加密其实是相对有效的。

    然而,这并不是单项加密与双向加密的决定性因素,本人认为,决定性因素在与客户端的数量。在解释之前,我们先回顾一下单向加密与双向加密的过程。

单向加密认证过程

基于MQTT协议的SSL/TLS加密传输的讨论


双向加密认证过程

SSL消息按如下顺序发送: 
1. Client Hello 
客户发送服务器信息,包括它所支持的密码组。密码组中有密码算法和钥匙大小; 
2. Server Hello 
服务器选择客户和服务器都支持的密码组到客户。 
3. Certificate 
服务器发送一个证书或一个证书链到客户端,一个证书链开始于服务器公共钥匙证书并结束于证明权威的根证书。这个消息是可选的,但服务器证书需要时,必须使用它。 
4. Certificate request 
当服务器需要鉴别客户时,它发送一个证书请求到客户端。在网络程序中,这个消息很少发送。 
5. Server key exchange 
服务器当发送来的公共钥匙对钥匙交换不是很充分时,发送一个服务器钥匙交换消息。 
6. Server hello done 
服务器告诉客户完成它的初始化流通消息。 
7. Certificate 
假如服务器需要一个客户证书时,客户端发送一个证书链。(只有在服务器需要客户证书时) 
8. Client key exchange 
客户产生用于对称算法的一个钥匙。对RSA客户用服务器公共钥匙加密这个钥匙信息并把它送到服务器。 
9. Certificate verify 
在网络程序中,这个消息很少发送,它主要是用来允许服务器结束对客户的鉴别处理。当用这个消息时,客户发送用密码函数的数字签名的信息到服务端,当服务端用公共钥匙解密这个消息时,服务器能够鉴别客户。 
10. Change cipher spec 
客户发送一个消息告诉服务器改变加密模式。 
11. Finished 
客户告诉服务器它已准备安全数据通信。 
12. Change cipher spec 
服务器发送一个消息到客户端并告诉客户修改加密模式。 
13. Finished 
服务器告诉客户端它已准备好安全数据通信。这是client-server握手协议最后一步。 
14. Encrypted data 
客户同服务器用对称加密算法和密码函数,并用客户发送到服务器的秘**匙加密通信。

    不难发现,双向加密是需要客户端提供一个由ca签署的证书。但是存在的问题是,虽然服务器端证书一份就够,而千千万万的客户端如果也安装证书,那是非常麻烦的,需要专门的管理机构生成证书,管理证书,还要颁发给客户端,还要各种配置,还要对证书的生命周期进行管理,所以比较费事。但是,如果只绑定一个ip,相当与每个设备都需要绑定在有独立ip的网关,比较麻烦。何况,商用时,证书需要由由资格的第三方机构颁发证书,不可能一个设备有一个证书,费时费力,难管理。因此,综合考虑,本人认为,单双向加密的难点在这里。所以,对于很多客户端的时候,往往使用的就是单项加密而不是双向加密。

    很简单的例子:你访问https的网站的时候,就是一个单项加密过程,你的浏览器不要提供证书,但是访问的网站必须要提供证书。

     版权声明:本文为博主原创文章,未经博主允许不得转载。