zoukankan      html  css  js  c++  java
  • MQTT TLS 加密传输

    MQTT TLS 加密传输

    Mosquitto原生支持了TLS加密,TLS(传输层安全)是SSL(安全套接层)的新名称,生成证书后再配置一下MQTT代理,本文主要介绍Mqtt如何实现双向认证和单向认证方法。

    单向认证:就是只有服务器提供证书,客户端不需要证书,双向认证:服务端和客户端都提供证书。

    1.生成CA

    首先我们需要生成证书权威(Certificate Authority,CA)的认证和密钥,生成过程中Common Name就是hostname,网上很多生成CA证书直接指令OpenSSl方法,没有对Common Name进行扩展,本文不是主要介绍CA生成方法,这里为方便直接采用github中的一个脚本,可以让hostname为localhost、本机ip或127.0.0.1,通过链接脚本地址运行脚本。

    OweTracks项目下载并运行generate-CA.sh脚本。该脚本创建CA文件,生成服务器证书,并使用CA来签名证书。

    运行脚本 

    $ mkdir myca

    $ cd myca

    $ bash ./generate-CA.sh

    generate-CA.sh会产生6个文件:ca.crt,ca.key,ca.srl,host.crt,host.csr和host.key。分别为: 证书(.CRT),钥匙(.KEY),请求(.csr文件),并在签名过程中的一系列记录文件(.slr),注意host是系统名字,也就是服务器端的文件。

    其中将三个文件拷贝到/etc/mosquitto目录:

    $ sudo cp ca.crt /etc/mosquitto/ca_certificates/
    $ sudo cp host.crt host.key /etc/mosquitto/certs/

    2.单向认证

    1、配置文件/etc/mosquitto/mosquitto.conf:

    # mosquitto.conf

    pid_file /var/run/mosquitto.pid

    persistence true

    persistence_location /var/lib/mosquitto/

    log_dest file /var/log/mosquitto/mosquitto.log

    port 8883

    cafile /etc/mosquitto/ca_certificates/ca.crt

    certfile /etc/mosquitto/certs/host.crt

    keyfile /etc/mosquitto/certs/host.key

    在拷贝证书文件和修改mosiquitto.conf后, 重启服务:

    $ sudo service mosquitto restart

    2、单向认证时客户端不需要生成客户端证书、钥匙和请求,仅需要将CA证书ca.crt,ca.key,ca.srl,拷贝到客户端系统中

    客户端接收mosquitto_sub:

    $ mosquitto_sub -p 8883 -t /cnc/knd/# --cafile ca.crt

    客户端发布mosquitto_pub

    $ mosquitto_pub -p 8883 -t /cnc/knd/# -m "status"--cafile ca.crt

    3.双向认证

    1、若为双向认证则需根据CA证书生成客户端证书,生成客户端证书、钥匙和请求的方法是在CA证书文件夹下执行OpenSSL

    $ openssl genrsa -out client.key 2048
    $ openssl req -new -out client.csr -key client.key -subj "/CN=client/O=example.com"
    $ openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAserial ./ca.srl -out client.crt -days 3650 -addtrust clientAuth

    2、配置文件/etc/mosquitto/mosquitto.conf多一行:

    require_certificate true

    3、双向认证时客户端需要写入自己的证书信息和密钥来进行验证,

    客户端接收mosquitto_sub:

    $ mosquitto_sub -p 8883 -t /cnc/knd/# --cafile ca.crt --cert client.crt --key client.key

    客户端发布mosquitto_pub

    $ mosquitto_pub -p 8883 -t /cnc/knd/# -m "status"--cafile ca.crt --cert client.crt --key client.key

    4. 总结

    可以看出双向认证一个客户端有一个自己的证书信息,这样更为安全,但每个客户端都需要安装证书也很麻烦,具体采用什么方法,还要考虑实际场合,第一次接触TLS,如有错误,还请指教。

  • 相关阅读:
    01
    王天宇0703作业
    0706作业
    0705作业
    0704作业
    0703作业
    数据库死锁语句脚本
    项目问题 : 尝试读取或写入受保护的内存。这通常指示其他内存已损坏
    工厂模式(Factory Patter)
    修改DevExpress中英文提示,将英文改为中文
  • 原文地址:https://www.cnblogs.com/xiating/p/8672887.html
Copyright © 2011-2022 走看看