参考:
https://blog.csdn.net/qq_36202485/article/details/88949091
https://www.cnblogs.com/zkwarrior/p/10972464.html
对原作者表示感谢!
由于win10下,使用apollo服务器配置双向认证不成功,因此想到了使用mosquitto服务器。
Mosquitto官网下载地址:https://mosquitto.org/download/
注意安装过程中安装目录不能有空格、汉字。
安装完成Mosquitto之后,服务还没有启动,需要手动启动windows服务Mosquitto Broker,启动方法:
此电脑——右键“管理”——服务和应用程序——服务——找到Mosquitto Broker右键——启动。
该服务默认监听1883端口。
启动服务
windows下使用命令提示符cmd,进入mosquitto安装目录
输入命令 mosquitto -c mosquitto.conf
无提示信息,表示mqtt的broker端已经启动
根证书CA、服务端证书server.crt、服务端私钥server.key、客户端证书client.crt、客户端私钥client.key
生成方法,可以网上搜索。以下仅供参考:
1、创建根证书
CA根证书的生成步骤
生成CA私钥(.key)–>
生成CA证书请求(.csr)–>
自签名得到根证书(.crt)(CA给自已颁发的证书)。
1-1)、生成CA私钥(.key):
openssl genrsa -des3 -out rootca.key 1024
1-2)、生成CA证书请求(.csr):
openssl req -new -key rootca.key -out rootca.csr -config D:workzhengshuopenssl.cfg
1-3)、自签名得到根证书CA(.crt):
openssl req -x509 -days 365 -key rootca.key -in rootca.csr -out rootca.crt -config D:workzhengshuopenssl.cfg
用户证书的生成步骤
生成私钥(.key)–>生成证书请求(.csr)–>用CA根证书签名得到证书(.crt)
2、创建服务端用户证书
2-1)、生成私钥(.key)
openssl genrsa -des3 -out server.key 1024
2-2)、生成证书请求(.csr)
openssl req -new -key server.key -out server.csr -config D:workzhengshuopenssl.cfg
注:
服务启动的时候需要输入server.key的密码,解决办法是可以使用原key来生成解密后的key,并以解密后的key来代替,如下通过原server.key生成解密后的server_unsecure.key:(不推荐,未使用)
openssl rsa -in server.key -out server.key.unsecure
2-3)、用CA根证书签名得到证书(.crt)
openssl ca -in server.csr -out server.crt -cert rootca.crt -keyfile rootca.key -config D:workzhengshuopenssl.cfg
重要注意:
这一步:在目录D:workzhengshu下新建目录demoCA、certs,
在demoCA下,新建目录newcerts,在demoCA下,新建文件index.txt,内容为空,新建文本文件serial并且不能带后缀txt,写入01保存,然后回车根据提示往下进行。
如果增加天数,则按照如下模式(加入参数-days):
openssl ca -in server.csr -out server.crt -cert rootca.crt -keyfile rootca.key -days 365
-config D:workzhengshuopenssl.cfg
3、创建客户端用户证书
3-1)、生成私钥(.key)
openssl genrsa -des3 -out client.key 1024
.key 转换成 .pem:(MQTT.fx客户端在配置双向认证时需要这个格式)
openssl rsa -in temp.key -out temp.pem
举例:
openssl rsa -in client.key -out clientkey.pem
3-2)、生成证书请求(.csr)
openssl req -new -key client.key -out client.csr -config D:workzhengshuopenssl.cfg
3-3)、用CA根证书签名得到证书(.crt)
openssl ca -in client.csr -out client.crt -cert rootca.crt -keyfile rootca.key -config D:workzhengshuopenssl.cfg
3-4)、格式转换(转换为pfx格式,根据需要可能会用到,本例子未使用)
openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.pfx
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAserial ./ca.srl -out client.crt -days 3650 -addtrust clientAuth
本节内容配置在mosquitto.conf文件中
#设置不允许匿名登录
allow_anonymous false
#设置账户密码文件位置为 D:ProgramFilesMosquittopwfile.example
password_file D:ProgramFilesMosquittopwfile.example
插入新用户名及密码(后面登录需要)
mosquitto_passwd pwfile.example user1
注意:以下“纯单向”、“纯双向”、“单双向同时”的配置,三选一配置在文件mosquitto.conf中,端口自己随意设置,只要不冲突即可
纯单向认证配置
port 1884 -----设置TLS端口 为1884
cafile d:/myca/ca.crt -------- 证书文件
certfile d:/myca/server.crt ------------服务器证书文件
keyfile d:/myca/server.key ------------服务器私钥文件
双向认证的时候,客户端也需要提供证书。
在配置文件的时候 需要增加三项,意思是需要客户端也提供证书。
纯双向认证配置
port 1884 -----设置TLS端口 为1884
cafile d:/myca/ca.crt -------- 证书文件
certfile d:/myca/server.crt ------------服务器证书文件
keyfile d:/myca/server.key ------------服务器私钥文件
// 比单向认证增加的三项
allow_anonymous true
require_certificate true
use_identity_as_username true
注意:在 mosquitto 配置文件中 可以同时打开双向认证 和 单项认证 ,配置文件如下:
同时打开双向认证和单项认证的配置文件:
//1886的端口是双向认证的,客户端需要提供自己的client.crt证书,ca.crt, client.key
port 1886
cafile d:/myca/ca.crt
certfile d:/myca/server.crt
keyfile d:/myca/server.key
allow_anonymous true
require_certificate true
use_identity_as_username true
//1887端口是单向认证的 ,客户端只需要提供ca.crt证书就可以了
listener 1887
cafile d:/myca/ca.crt
certfile d:/myca/server.crt
keyfile d:/myca/server.key
以下是单向认证的配置截图
以下是双向认证的配置截图
以下是用户名+密码设置(就是前面在配置mosquitto.conf时插入的用户名及密码)



