ssl双向认证

一、背景知识

1、名词解释

ca.key: 根证书的私钥 , ca.crt: 根证书的签名证书

server.key, server.crt

client.key, client.crt

2、生成机制

1、openssl-> ca.key,ca.crt
2、openssl-> server.key->server.csr<-ca.crt+ca.key =>server.crt
3、openssl-> client.key->client.csr<-ca.crt+ca.key =>client.crt

功能设计:

第一步,使用openssl生成ca.key -> ca.crt, 

生成server.key -> server.csr , server.csr + ca.key + ca.crt  -> server.crt

第二步,配置 ca.crt, server.key, server.crt 到 mosquito服务器

第三步,配置 ca.crt, ca.key 到管理控制台,

              通过管理控制台生成client.key -> client.csr,client.csr + ca.key + ca.crt  -> client.crt, 并提供 ca.crt + client.crt + client.key 的下载

3、部署发布

      服务器端: 持有 ca.crt , server.key + server.crt , 如: mosquito

      客户端: 持有 ca.crt , server.key, server.crt , 如:设备

      证书生成端: 持有 ca.crt , ca.key, 如:管理控制台

二、生成证书

1 产生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”表示该条命令将产生自签名的证书,一般都是测试的时候采用。
命令执行过程中将需要输入国别、省份(或州)、市、Common Name等参数,其中” Common Name”参数,必须是当前机子的IP地址,使用主机名不行。

2 使用该CA为server签发证书

使用该CA为server产生证书文件。
(1)产生密钥文件server.key
该命令将产生加密的RSA私钥,其中参数”-des3”表示对产生的RSA私钥加密,参数”2048”表示私钥的长度,这里产生的私钥文件“server.key”将在下一步使用,同时在mosquitto程序的配置文件中也需要使用。
openssl genrsa -des3 -out server.key 2048
(2)产生证书签发的请求文件server.csr
该命令将使用上一步产生的“server.key”文件为server产生一个签发证书所需要的请求文件:server.csr,使用该文件向CA发送请求才会得到CA签发的证书。
openssl req -out server.csr -key server.key -new
同样该过程需要注意Common Name参数需要填写当前主机的IP地址。
(3)为mosquitto server产生证书文件:server.crt
命令:
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 36500
这一步将需要输入CA的密码。该命令将使用CA的密钥文件ca.key,CA的证书文件ca.crt和上一步为mosquitto server产生证书请求文件server.csr文件这三个文件向CA请求产生一个证书文件,证书文件的名字为:server.crt。

3 使用该CA为client签发证书

该过程与1.2类似。
(1) 产生密钥文件client.key
openssl genrsa -out client.key 2048
(2) 产生一个签发证书的请求文件"client.csr"
openssl req -out client.csr -key client.key -new
产生证书请求文件时需要第一步产生的私钥文件client.key作为输入。
(3)CA为mosquitto客户端产生一个证书文件”client.crt”
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 36500
三、配置使用

1、修改配置

1.1 修改mosquitto配置文件

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

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

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

1.2启动mosquitto server

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

mosquitto -c mosquitto.conf -v

2、mosquito.fx

配置如下:

注意:不需要填写用户名和密码,可以连接成功。

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不识别的问题。

ssl双向认证的更多相关文章

  1. tomcat配置SSL双向认证

    一.SSL简单介绍 SSL(Secure Sockets Layer 安全套接层)就是一种协议(规范),用于保障客户端和服务器端通信的安全,以免通信时传输的信息被窃取或者修改. 怎样保障数据传输安全? ...

  2. SSL双向认证java实现(转)

    本文通过模拟场景,介绍SSL双向认证的java实现 默认的情况下,我认为读者已经对SSL原理有一定的了解,所以文章中对SSL的原理,不做详细的介绍. 如果有这个需要,那么通过GOOGLE,可以搜索到很 ...

  3. SSL双向认证(高清版)

    介绍了SSL双向认证的一些基本问题,以及使用Nginx+PHP基于它搭建https的Webservice. 之前的方式只是实现1:1的模式,昨天同事继续实现了n:1的模式,这里我再整理记录下. 由于n ...

  4. Nginx、SSL双向认证、PHP、SOAP、Webservice、https

    本文是1:1模式,N:1模式请参见新的一篇博客<SSL双向认证(高清版)> ----------------------------------------------------- 我是 ...

  5. apache用户认证,ssl双向认证配置

    安装环境: OS:contos 6.4 httpd:httpd-2.2.15-59.el6.centos.i686.rpm openssl:openssl-1.0.1e-57.el6.i686.rpm ...

  6. SSL双向认证和SSL单向认证的流程和区别

    refs: SSL双向认证和SSL单向认证的区别https://www.jianshu.com/p/fb5fe0165ef2 图解 https 单向认证和双向认证!https://cloud.tenc ...

  7. php实现https(tls/ssl)双向认证

    php实现https(tls/ssl)双向认证 通常情况下,在部署https的时候,是基于ssl单向认证的,也就是说只要客户端认证服务器,而服务器不需要认证客户端. 但在一些安全性较高的场景,如银行, ...

  8. nginx支持ssl双向认证配置

    nginx支持ssl双向认证配置 listen 443; server_name test.com; ssl on; ssl_certificate server.crt; //server端公钥 s ...

  9. php使用curl库进行ssl双向认证

    官方文档: http://www.php.net/manual/zh/function.curl-setopt.php#10692 官方举例: <?phpcurl_setopt($ch, CUR ...

随机推荐

  1. C++学习-7

    1.面向过程是:数据与操作分离,数据容易被意外修改 2.面向过程通过私有化的权限进行数据封装 3.类型后辍:类名 operator "" _XXXX(int data)  增加后缀 ...

  2. Django 2.0 学习(04):Django数据库

    数据库设置/配置 打开mysite/settings.py,我们会发现Django是用的是默认的数据库SQLite,如下图所示: Django也是支持其它数据库的,比如PostgreSQL.MySQL ...

  3. Prototype模式

    浅克隆:对值类型的成员变量进行值的复制,对引用类型的成员变量只复制引用,不复制引用的对象.深克隆:对值类型的成员变量进行值的复制,对引用类型的成员变量也进行引用对象的复制. /** * Created ...

  4. 需掌握 - JAVA算法编程题50题及答案

    [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? //这是一个菲波拉契数列问题publi ...

  5. 吐槽net下没有靠谱的FastDFS的sdk之使用thrift实现JAVA和C#互通

    事情是这样的,在一个新项目中引入了fastdfs,用这玩意做一些小数据的存储还是很方便的,然后在nuget上就找一个对接FastDFS的sdk,如下图: 一眼就看到了这个top1的sdk,应该会比较靠 ...

  6. JAVA实现双向链表的增删功能

    JAVA实现双向链表的增删功能,完整代码 package linked; class LinkedTable{ } public class LinkedTableTest { //构造单链表 sta ...

  7. Redis TTL命令

    Redis TTL 命令以秒为单位返回 key 的剩余过期时间. redis TTL 命令基本语法如下: redis 127.0.0.1:6379> TTL KEY_NAME 当 key 不存在 ...

  8. 深入解读 Js 中的面向对象编程

    前言:今天看了一篇文章觉得很不错,所以给大家分享一下,也许很多人都看过面向对象编程甚至写过这样博客,觉得面向对象编程就那样,没啥好说的,那可能是因为你对这方面知识已经了解,可以选择性跳过.那如果有更通 ...

  9. ORACLE 监听

    今天来学习一下监听的相关内容,昨晚被老大问了两个关于监听很简单的问题,但是却吞吞吐吐回答,而且有一个问题还答错了,刚刚查了下资料,才发现"驴头对了马嘴",哭笑不得. 一.监听(li ...

  10. 玩转接口测试工具fiddler 教程系列1

    我们在做web测试的时候,很多时候需要查看接口发送的数据返回的数据是否正常,这样可以排除是客户端的问题还是服务器的问题,举个例子来说,如果我们发现页面上面数据少了, 通过fiddler查看数据返回就少 ...