HAProxy终结TLS双向认证代理EMQX集群

这篇具有很好参考价值的文章主要介绍了HAProxy终结TLS双向认证代理EMQX集群。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 背景介绍

  MQTT协议已经成为当前物联网领域的关键技术之一,当前市面上主流的实现MQTT协议的产品主要有 EMQX、Mosquito、NanoMQ等。本文以EMQX开源版为基础,构建 MQTT Broker 集群,并使用 HAProxy代理 MQTT Broker 集群,由 HAProxy 开启双向认证,并终结TLS,HAProxy 到 MQTT Broker 集群的流量采用非加密模式。

2. 系统架构

HAProxy终结TLS双向认证代理EMQX集群,物联网连接平台,MQTT集群,EMQX集群,HAProxy,中间证书,双向认证
  设备端携带设备证书向NLB所在的域名发起业务请求,NLB将流量转发到 HAProxy 负载均衡服务,HAProxy校验设备证书的有效性,当校验通过后终结TLS,将流量分发到某个MQTT Broker节点。HAProxy的负载策略可采用循环负载。

3. 证书签发

  使用 cfssl 工具签发设备证书。证书信任模型为:
HAProxy终结TLS双向认证代理EMQX集群,物联网连接平台,MQTT集群,EMQX集群,HAProxy,中间证书,双向认证

3.1 创建根证书

  • 首先创建配置文件config.json
{
   "signing": {
     "default": {
       "expiry": "262800h"
     },
     "profiles": {
       "intermediate": {
         "usages": ["cert sign", "crl sign"],
         "expiry": "700800h",
         "ca_constraint": {
           "is_ca": true,
           "max_path_len": 1
         }
      },
      "device": {
        "usages": [
            "client auth",
            "signing",
            "digital signing",
            "key encipherment",
            "server auth"
        ],
        "expiry": "262800h"
      }
     }
   }
 }
  • 创建根证书配置文件 root.json
{
    "CN": "emqx.com",
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "L": "WuHan",
            "O": "emqx",
            "OU": "EMQX Root CA",
            "ST": "China"
        }
    ]
}
  • 创建根CA证书
cfssl gencert -initca root.json  | cfssljson -bare CaRoot
  • 执行上边命令后将会得到根证书私钥、根证书请求文件、根证书。
    HAProxy终结TLS双向认证代理EMQX集群,物联网连接平台,MQTT集群,EMQX集群,HAProxy,中间证书,双向认证

3.2 创建中间证书

  • 创建中间证书配置文件 intermediate.json
{
  "CN": "intermediate.emqx.com",
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "WuHan",
      "L": "XS",
      "O": "EMQX intermediate CA",
      "OU": "EMQX intermediate CA"
    }
  ]
}
  • 使用根CA签发中间证书
cfssl gencert -ca=./CaRoot.pem -ca-key=./CaRoot-key.pem -config=./config.json -profile=intermediate ./intermediate.json | cfssljson -bare CaIntermediate
  • 执行上边命令后将会生成中间证书私钥、中间证书申请文件、中间证书
    HAProxy终结TLS双向认证代理EMQX集群,物联网连接平台,MQTT集群,EMQX集群,HAProxy,中间证书,双向认证

3.3 创建设备证书

  • 创建设备证书配置文件device-a-csr.json
{
  "CN": "DEVICEAXXXXXXXX",
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "WuHan",
      "L": "XS",
      "O": "EMQX DEVICE",
      "OU": "EMQX DEVICE"
    }
  ]
}
  • 创建设备证书
cfssl gencert -ca=./CaIntermediate.pem -ca-key=./CaIntermediate-key.pem -config=./config.json -profile=device ./device-a-csr.json | cfssljson -bare device-a
  • 执行上边命令将会得到设备证书私钥、设备证书申请文件、设备证书
    HAProxy终结TLS双向认证代理EMQX集群,物联网连接平台,MQTT集群,EMQX集群,HAProxy,中间证书,双向认证

3.4 创建服务端证书

  • 创建服务端证书配置文件 emqx-server-csr.json
{
  "CN": "emqx.xxx.com",
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "Hubei",
      "L": "Wuhan",
      "O": "emqx",
      "OU": "EMQX Server"
    }
  ]
}
  • 使用根CA签发服务端证书
cfssl gencert -ca=./CaRoot.pem -ca-key=./CaRoot-key.pem -config=./config.json -profile=device ./emqx-server-csr.json | cfssljson -bare emqx-server
  • 执行上边命令将会得到EMQX服务端证书私钥 emqx-server-key.pem、证书申请文件 emqx-server.csr、服务端证书emqx-server.pem
  • 将服务端证书私钥与服务端证书合并到一个PEM文件,得到 server-allinone.pem 证书文件。
cat emqx-server-key.pem emqx-server.pem |tee server-allinone.pem

4. HAProxy开启双向认证

  修改/etc/haproxy/haproxy.cfg文件,开启MQTT Broker访问端口,并开启双向认证。

frontend emqx-tls
        bind *:8091 ssl crt /etc/emqx/certs/server-allinone.pem ca-file /etc/haproxy/certs/CaIntermediate.pem ca-verify-file /etc/haproxy/certs/CaRoot.pem verify required
        # 一层证书信任模型,设备证书直接由根证书签发时,ca-file 配置根证书
        # bind *:8091 ssl crt /etc/emqx/certs/server-allinone.pem ca-file /etc/haproxy/certs/CaRoot.pem verify required
        mode tcp
        log global
        option tcplog
        default_backend emqx-backend

backend emqx-backend
        mode tcp
        option tcplog
        balance roundrobin
        default-server inter 10s downinter 5s rise 2 fall 2 slowstart 60s maxconn 500000 maxqueue 10000 weight 100
        server emqx-165 10.0.1.165:1883 check-send-proxy send-proxy-v2 check inter 10s fall 2 rise 5
        server emqx-171 10.0.1.171:1883 check-send-proxy send-proxy-v2 check inter 10s fall 2 rise 5
  • ca-file 指定中间证书,用于校验设备端证书的有效性
  • ca-verify-file 指定根CA证书,用于校验中间证书的有效性,如果只有一层信任模型,这个参数通常不会使用
  • crt 指定服务端证书,此处的服务端证书包含了证书及私钥
  • verify required 表示开启双向认证,
  • check-send-proxy send-proxy-v2 用于开启 Proxy Protocol 协议,MQTT Broker 可获取到设备端的IP地址
  • maxconn 指定最大连接数,默认值2000,一定要修改这个值,否则设备连接最大数量将会被限制在2000个连接内

当 HAProxy 设置了 check-send-proxy 与 send-proxy-v2 参数后,需要 EMQX 开启 proxy-protocol 协议。开启方式时修改 /etc/emqx/emqx.conf 配置文件,在 1883 监听端口配置 proxy-protocol = true

listeners.tcp.default {
  bind = "0.0.0.0:1883"
  max_connections = 500000
  proxy_protocol = true
}

5. 验证

   使用 MQTT客户端工具向NLB所在的IP地址发起连接请求,请求参数携带根CA证书,设备证书,设备私钥,详细信息如下图所示:
HAProxy终结TLS双向认证代理EMQX集群,物联网连接平台,MQTT集群,EMQX集群,HAProxy,中间证书,双向认证
  点击CONNECT按钮发起连接请求。
HAProxy终结TLS双向认证代理EMQX集群,物联网连接平台,MQTT集群,EMQX集群,HAProxy,中间证书,双向认证
  如上图所示,客户端成功连接到MQTT Broker。

6. 总结

   HAProxy 作为一款非常优秀的四层均衡程序,在大量的生产项目中得到广泛的应用,相较于NGINX在七层负载场景中广泛应用,四层负载均衡服务在TCP服务负载业务场景上有着更好的性能优势。云商的NLB服务作为高可靠的负载均衡服务,为何不直接将NLB的流量负载分发到MQTT Broker节点,还额外的安装HAProxy负载均衡程序,主要原因是云商NLB的功能通常比较基础,无法满足企业额外的定制化需求,所以,大量的业务场景中使用云商的NLB作为第一层负载入口,定制化的业务处理交给后边的HAProxy负载均衡服务实现。文章来源地址https://www.toymoban.com/news/detail-709238.html

到了这里,关于HAProxy终结TLS双向认证代理EMQX集群的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • EMQX启用双向SSL/TLS安全连接以及java连接

    作为基于现代密码学公钥算法的安全协议,TLS/SSL 能在计算机通讯网络上保证传输安全,EMQX 内置对 TLS/SSL 的支持,包括支持单/双向认证、X.509 证书、负载均衡 SSL 等多种安全认证。你可以为 EMQX 支持的所有协议启用 SSL/TLS,也可以将 EMQX 提供的 HTTP API 配置为使用 TLS。 强认证

    2024年02月11日
    浏览(23)
  • java使用smiley-http-proxy-servlet实现反向代理,跳过SSL认证

            nginx可以实现反向代理,但是有时候需要使用java代码来实现,经过摸索,发现有开源的项目可以实现,所以简单记录一下如何使用         没啥好说         该项目的核心类是ProxyServlet,主要操作都在这个类中实现了,我们可以继承该类,重写其中的方法,自定义

    2024年02月09日
    浏览(32)
  • k8s 对外服务之 ingress|ingress的对外暴露方式|ingress http,https代理|ingress nginx的认证,nginx重写

    service的作用体现在两个方面,对集群内部,它不断跟踪pod的变化,更新endpoint中对应pod的对象,提供了ip不断变化的pod的服务发现机制;对集群外部,他类似负载均衡器,可以在集群内外部对pod进行访问。 在Kubernetes中,Pod的IP地址和service的ClusterIP仅可以在集群网络内部使用,

    2024年02月10日
    浏览(34)
  • [grpc]双向tls加密认证

    假设gRPC服务端的主机名为 qw.er.com ,需要为gRPC服务端和客户端之间的通信配置tls双向认证加密。 生成ca根证书。生成过程会要求填写密码、CN、ON、OU等信息,记住密码。 新建并编辑文件 openssl.cnf 文件。req_distinguished_name中内容按需填写,DNS.1要替换成实际域名。 生成服务端证

    2024年02月14日
    浏览(36)
  • gRPC — SSL/TLS单向认证、双向认证、Token认证

    传输层安全性协议(Transport Layer Security,缩写作 TLS ) ,其前身 安全套接层(Secure Sockets Layer,缩写作 SSL )是一种安全协议,目的是为互联网通信提供安全及数据完整性保障。根据传输层安全协议的规范,客户端与服务端的连接安全应该具备连接是私密的或连接是可靠的一

    2024年04月09日
    浏览(35)
  • 基于SSL/TLS双向安全连接设备CA证书认证

    小伙伴儿们,如果觉得文章干货满满,欢迎加入公众号【编程识堂】,更多干货等你们来哦! 设备证书是由CA根证书签发给客户端设备使用的数字证书,用于客户端和服务端连接时,服务端对客户端进行安全认证。认证通过后服务端和客户端可基于证书内的加密密钥进行安全

    2024年01月20日
    浏览(35)
  • EMQX的JWT认证

    对于大量设备需要接入EMQX,并且一个设备一个密码,就需要使用JWT认证,批量签发秘钥,配置到各个设备当中。 1、开启JWT认证 在模块菜单下,选择添加模块,在认证鉴权中找到JWT认证,选择进入到JWT的配置界面。 2、配置JWT 认证来源默认选择password,表示用户在客户端中密

    2024年02月16日
    浏览(32)
  • HAProxy负载均衡 代理

    1.安装 yum -y install haproxy 2.配置文件 /etc/haproxy 下 global log 127.0.0.1 local2 #日志定义级别 chroot /var/lib/haproxy #当前工作目录 pidfile /var/run/haproxy.pid #进程id maxconn 4000 #最大连接数 daemon #后台形式运行 stats socket /var/lib/haproxy/stats mode 600 level admin # level为admin,否 则使用socat时会提示权限拒

    2024年02月12日
    浏览(27)
  • EMQX HTTP Auth认证

    系统的安全性需要从身份认证、操作授权、黑名单机制、数据安全传输等几个方面去考虑,EMQX Broker的安全也是从这几方面考虑,下面分别介绍下EMQX安全特性。 身份验证是大多数应用程序的重要组成部分。MQTT 协议支持用户名/密码认证以及增强认证,例如 SASL/SCRAM 身份验证。

    2023年04月12日
    浏览(48)
  • HAProxy代理TCP(使用HAProxy 为TiDB-Server 做负载均衡)

    安装 docker-compose IP: 192.168.180.46 系统: CentOS 7 Core: 8核 HAProxy版本 2.0.6 服务器 IP hostname HAProxy 192.168.180.46 test1 TiDB-Server 192.168.180.47 test2 TiDB-Server 192.168.180.48 test3 TiDB-Server 192.168.181.18 test4 查看管理界面: http://192.168.180.46:1080/stats 数据库连接地址: 192.168.180.46:4600

    2024年02月07日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包