http://houjixin.blog.163.com/blog/static/35628410201432205042955/

1、 SSL简介

SSL(SecureSocket Layer)安全套接层,是网景公司提出的用于保证Server与client之间安全通信的一种协议,该协议位于TCP/IP协议与各应用层协议之间, 即SSL独立于各应用层协议,因此各应用层协议可以透明地调用SSL来保证自身传输的安全性,SSL与TCP/IP协议及其其他应用层协议之间的关系如图 1所示。

图1 SSL/TLS协议与应用层协议及tcp/ip层协议的关系

目前,SSL被大量应用于http的安全通信中,MQTT协议与http协议同样属于应用层协议,因此也可以像http协议一样使用ssl为自己的通信提供安全保证。

SSL与TLS(Transport LayerSecurity Protocol)之间的关系:TLS(TransportLayer Security,传输层安全协议)是IETF(InternetEngineering Task Force,Internet工程任务组)制定的一种新的协议,它建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本。在TLS与SSL3.0之间存在着显著的差别,主要是它们所支持的加密算法不同,所以TLS与SSL3.0不能互操作。

开源的算法Openssl对SSL以及TLS1.0都能提供较好的支持,因此,后面使用mosquitto时也采用Openssl作为SSL的实现。

2、 Openssl安装与常用命令说明

2.1、安装

在CentOS6.3上安装Openssl的命令如下:

yum install openssl-devel

注意在安装的时候要安装“openssl-devel”,而不是“openssl”。

安装成功之后可以使用如下命令查看openssl的版本:

[root@cddserver1~]# openssl version

OpenSSL1.0.1e-fips 11 Feb 2013

2.2、常用命令说明

SSL在身份认证过程中需要有一个双方都信任的CA签发的证书,CA签发证书是需要收费的,但是在测试过程中,可以自己产生一个CA,然后用自己产生的CA签发证书,下面的mosquitto的ssl功能的测试过程就是采用这一方式,其过程如下:

1)       产 生自己的CA,该过程将为CA产生两个文件:ca.key和ca.crt(文件的名字可以修改),其中ca.key是我们自己产生的CA的“密钥文件 “,ca.crt是我们自己产生的CA的”证书文件“,本步结束CA将拥有两个文件ca.key和ca.crt,然后将为CA产生的这两个文件分别拷贝到 mosquitto server及客户端所在的机子上;

2)       在 server所在的机子上,使用这个自己产生的CA为mosquitto的server端签发证书,本步将产生 server.key,server.csr和server.crt三个文件(文件名字可以修改),这里server.csr是签发证书的请求文件,CA 为server端产生证书文件时将用到它,产生完证书文件之后,该文件就不用了;server.key和 server.crt这两个文件将会在后续的SSL通信过程中用到。

3)       在测试客户端所用的机子上,使用这个自己产生的CA为mosquitto的客户端签发证书;本步将产生client.key,client.csr和client.crt三个文件(文件名字可以修改),各文件的含义跟server端类似。

上述三个过程将使用openssl完成,将用到如下几条相关的命令:

l    产生CA的key和证书文件

openssl req -new -x509 -days 36500-extensions v3_ca -keyout ca.key -out ca.crt

该命令将为CA产生一个名字为“ca.key”的key文件和一个名字为“ca.crt”的证书文件,这个crt就是CA自己给自己签名的证书文件。

该命令中选项“-x509”表示该条命令将产生自签名的证书,一般都是测试的时候采用。

l    为mosquittoserver私钥文件“server.key”和证书文件”server.crt”

(1)为mosquittoserver产生一个私钥文件server.key

opensslgenrsa -out server.key 2048

该命令将产生一个不加密的RSA私钥,其中参数“2048”表示私钥的长度,这里产生的私钥文件“server.key”将在下一步使用,同时在mosquitto程序的配置文件中也需要使用。

如果需要为产生的RSA私钥加密,则需加上选项“-des3”,对私钥文件加密之后,后续使用该密钥的时候都要求输入密码。产生加密RSA私钥文件的命令如下:

opensslgenrsa -des3 -out server.key 2048

如果为RSA私钥文件加密了,则一定要记好密码,后面产生csr文件时以及后续使用该私钥文件都会用到该密码。

(2)为mosquitto server产生一个签发证书的请求文件“server.csr”

opensslreq -out server.csr -key server.key -new

该命令将使用上一步产生的“server.key”文件为server产生一个签发证书所需要的请求文件:server.csr,使用该文件向CA发送请求才会得到CA签发的证书。

(3)CA为mosquitto server产生一个证书文件

openssl x509 -req -in server.csr -CA ca.crt-CAkey ca.key -CAcreateserial -out server.crt -days 36500

该 命令将使用CA的密钥文件ca.key,CA的证书文件ca.crt和上一步为mosquitto server产生证书请求文件server.csr文件这三个文件向CA请求产生一个证书文件,证书文件的名字为:server.crt。该命令中的 36500可以修改为自己定义的时间值。

l    为mosquitto的客户端程序产生私钥文件”client.key”和证书文件“client.crt”,过程与为server端类似,这里将不再累述。

(1) 为mosquittoserver产生一个私钥文件”client.key”

openssl genrsa-out client.key 2048

(2) 为mosquitto客户端产生一个签发证书的请求文件“client.csr “

openssl req-out client.csr -key client.key-new

产生证书请求文件时需要第一步产生的私钥文件client.key作为输入。

(3) CA为mosquitto客户端产生一个证书文件”client.crt”

opensslx509 -req -in client.csr-CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 36500

3、 Mosquito使用ssl功能的具体操作方法

下面的例子中,将使用:A(192.168.4.222),B(192.168.4.223)和C(192.168.4.221)这三台机子,其中使用A制作CA证书;在B上运行mosquitto实例,在C上运行一个订阅端,一个发布端。

3.1、产生CA

测试过程中CA在主机cddserver3上;另外,测试过程中,无需采用真正的CA,使用我们自己产生的CA即可,使用命令为:

openssl req -new-x509 -days 36500 -extensions v3_ca -keyout ca.key -out ca.crt

命令执行过程中将需要输入国别、省份(或州)、市、Common Name等参数,其中最需要注意的是” Common Name”这个参数,它必须是当前机子的IP地址,使用主机名不行。如下截图所示

图3.1

特别要注意的是Common Name参数需要填写主机的IP地址,使用主机名不行。

本步结束即产生自己的CA,它有两个文件“ca.key“和”ca.crt“:

图3.2

3.2、使用自己产生的CA为server签发证书

将3.1中产生的CA文件拷贝mosquitto server所在机子上(其主机名字为cddserver3)的某个位置,例如:/home/jason.hou/ssl,然后使用该CA为server产生证书文件。如下截图所示:

图3.3

(1)产生密钥文件server.key,为了减少测试过程中总是提出输入密码的麻烦,这里将为server产生一个不加密的密钥文件。过程如下截图所示:

图3-4

(2)产生证书签发的请求文件server.csr。过程如下截图所示:

图3-5

同样该过程需要注意Common Name参数需要填写当前主机的IP地址。

(3)为mosquitto server产生证书文件:server.crt,这一步将需要输入CA的密码,同样,这里也可以看到刚才为CA输入的参数国别、省份等参数,过程如下截图所示:

图3-6

3.3、使用自己产生的CA为client签发证书

该过程与3.2类似。首先,将3.1中产生的CA文件拷贝mosquittoclient所在机子(其主机名字为cddserver1)上的某个位置,例如:/home/jason.hou/ssl,然后使用该CA为server产生证书文件。如下截图所示:

图3-7

(1)  产生密钥文件client.key,过程如下截图所示:

图3-8

(2)  产生证书请求文件client.csr,过程如下截图所示:

图3-9

(3)  为客户产生证书文件Client.crt,过程如下截图所示:

图3-10

3.4、修改mosquitto配置文件

为了使用SSL功能Mosquito的配置文件mosquitto.conf需要修改以下四个地方:

(1)           port 参数,mosquitto官方网站建议在使用功能的时候使用8883端口,如下所示:

图3-11(1)

图3-11(2)

(2)           修改cafile参数,该参数表示CA的证书文件的位置,需将其设置为正确的位置,例如下图所示

图3-12

(3)           修改certfile参数,该参数表示CA为server端签发的证书文件的位置,如上图所示。

(4)           修改keyfile参数,该参数表示server端使用的key文件的位置。如上图所示。

3.5、运行程序

(1)启动mosquitto server端

使用修改后的配置文件启动mosquitto程序,上面修改的配置文件的路径,在mosquitto目录下,因此需要用-c参数指定其位置,如下图所示:

图3-13

(2)启动订阅端:

订阅端所在ssl文件的路径为:/home/jason.hou/ssl,启动时所使用的命令为:

./mosquitto_sub-h 192.168.4.223 -i 111 -p 8883 -t "111" --cafile/home/jason.hou/ssl/ca.crt --cert /home/jason.hou/ssl/client.crt --key/home/jason.hou/ssl/client.key

如下图所示:

图3-14

(4)  启动发布端

启动时所使用的命令为:

./mosquitto_pub -h192.168.4.223 -p 8883 -t "111" -m "this is jason.hou"--cafile /home/jason.hou/ssl/ca.crt --cert /home/jason.hou/ssl/client.crt --key/home/jason.hou/ssl/client.key

如下图所示:

图3-15

(5)  发布消息之后,mosquitto、订阅端、发布端的截图如下:

Mosquito:

图3-16

发布端:

图3-17

订阅端:

图3-18

1、 注意事项

(1)  制作签发证书的请求文件时,需要输入Common Name参数,此参数一定为当前主机的IP地址,否则将会显示证书错误。

(2)  如果不想SSL在身份认证的时候检查主机名(也即上面不检查第1条中Common Name参数),则需要在启动订阅端的时候,加上“--insecure”参数,例如:

./mosquitto_sub-h 192.168.4.223 -i 111 -p 8883 -t "111" --cafile/home/jason.hou/ssl/ca.crt --cert /home/jason.hou/ssl/client.crt --key/home/jason.hou/ssl/client.key  --insecure

(3)  自测过程中,server端与所有客户端所使用的证书必须由一个CA签发,否则,将会提示CA不识别的问题。

问题提示为:

1398166026:New connection from 192.168.4.221 on port 8883.

1398166026:OpenSSL Error: error:14094418:SSL routines:SSL3_READ_BYTES:tlsv1 alert unknownca

1398166026:OpenSSL Error: error:140940E5:SSL routines:SSL3_READ_BYTES:ssl handshakefailure

1398166026:Socket error on client (null), disconnecting.

如下图所示:

转载于:https://www.cnblogs.com/li-baibo/p/3790464.html

转(逍遥子)Mosquito使用SSL/TLS进行安全通信时的使用方法相关推荐

  1. PAYPAL 支付,sandbox测试的时候遇到异常:请求被中止: 未能创建 SSL/TLS 安全通道,以及解决方法。

    PAYPAL 支付,sandbox测试的时候遇到异常:请求被中止: 未能创建 SSL/TLS 安全通道,以及解决方法. 参考文章: (1)PAYPAL 支付,sandbox测试的时候遇到异常:请求被中 ...

  2. PAYPAL 支付,sandbox测试的时候遇到异常:请求被中止: 未能创建 SSL/TLS 安全通道,以及解决方法。...

    场景描述: 我公司的网站之前就已经开发好了下单支持paypal支付,当然,这个是其他同事开发的.前段时间,主管让我在另一个场景开发支持使用paypal支付,当时花了些时间看看关于paypal代码,然后 ...

  3. 深入解析:如何修复SSL / TLS握手失败错误(上)

    接下来的三篇内容我们来讨论SSL / TLS握手失败错误及其修复方法. 针对互联网用户和网站所有者的SSL / TLS握手失败错误修复程序 像许多SSL错误消息一样,SSL握手错误可以从客户端和服务器 ...

  4. 用OpenSSL编写SSL,TLS程序

    http://zhoulifa.bokee.com/6134045.html http://blog.sina.com.cn/s/blog_86ca13bb0100vaph.html http://b ...

  5. OpenSSL编写SSL,TLS程序

    一.简介: SSL(Secure Socket Layer)是netscape公司提出的主要用于web的安全通信标准,分为2.0版和3.0版.TLS(Transport Layer Security) ...

  6. 假如让你来设计SSL/TLS协议,你要怎么设计呢?

    本文分享自华为云社区<假如让你来设计SSLTLS协议>,作者:元闰子. 前言 说起网络通信协议,相信大家对 TCP 和 HTTP 都很熟悉,它们可以说是当今互联网通信的基石.但是,在网络安 ...

  7. SSL/TLS 以及HTTPS 介绍

    SSL/TLS 是一种协议, 用来保证网络传输的安全性. SSL/TLS 的定义与历史 SSL:Secure Sockets Layer ,安全套接层 TLS,Transport Layer Secu ...

  8. 细读HTTPS -- SSL/TLS历史,密码学

    文章目录 细读HTTPS -- SSL/TLS历史,密码学 SSL/TLS协议历史 密码学 对称加密 分组密码模式 ECB CBC 非对称加密 消息验证代码 散列函数 数字签名 细读HTTPS – S ...

  9. 开源项目SMSS发开指南(四)——SSL/TLS加密通信详解

    本文将详细介绍如何在Java端.C++端和NodeJs端实现基于SSL/TLS的加密通信,重点分析Java端利用SocketChannel和SSLEngine从握手到数据发送/接收的完整过程.本文也涵 ...

  10. 车联网通信安全之 SSL/TLS 协议

    前言 在汽车出行愈加智能化的今天,我们可以实现手机远程操控车辆解锁.启动通风.查看车辆周围影像,也可以通过 OTA(空中下载技术)完成升级车机固件.更新地图包等操作,自动驾驶技术更是可以让车辆根据路面 ...

最新文章

  1. 好奇了好久的「对象」,就这?
  2. python基础代码事例-Python简单基础小程序的实例代码
  3. html调用接口_搜狗ocr识别接口
  4. YAML/Properties配置文件与Spring Boot(转)
  5. redis分布式锁小试
  6. java bar_Java Bar类代码示例
  7. 甲骨文因超过90亿美元的NetSuite交易起诉Larry Ellison和CEO Safra Catz
  8. 炒股应只做确定的上涨
  9. 向android模拟器中复制文件报out of memory错误解决
  10. 清华大学超级计算机中心,中国科学技术大学超级计算中心
  11. SSM框架---开发免费小说网站(h5+电脑端)
  12. wav转mp3,wav转换成mp3
  13. python 删除word 某一章节_聊聊python 办公自动化之 Word(中)
  14. linux 7.5安装教程,如何在CentOS Linux 7.5上安装 Pip
  15. Android笔记-Felix
  16. source insight的查找功能
  17. 师兄写的一个JAVA播放器的源代码(转)
  18. SGSN - GPRS服务支持节点
  19. 校园欺凌——四位学生的乱伦之战!!!
  20. 手机怎么访问kodi_干货:如何使用KODI打造属于自己的娱乐媒体内容库?

热门文章

  1. git报错:index.lock File exists
  2. Aspose.Words使用模板导出数据库中图片内容
  3. Python爬虫:搜狗(微信,知乎)公众号内容
  4. Constructing Narrative Event Evolutionary Graph for Script Event Prediction
  5. Collaborative Evolutionary Reinforcement Learning
  6. 信息安全快讯丨密标委发布信息系统密码应用基本要求;国家漏洞库关于微软多个安全漏洞的通报;支付宝检测到部分苹果用户ID被盗
  7. JZOJ 3339. 【NOI2013模拟】wyl8899和法法塔的游戏
  8. Nagios常见问题集锦
  9. 管理感悟:今后公司工作的建议
  10. 手机锁屏密码忘了怎么办