乐趣区

关于物联网:使用-EMQX-Cloud-实现物联网设备一机一密验证

数据安全是物联网利用的重中之重。各厂商常应用对称加密、非对称加密、数字签名、数字证书等办法来对设施进行认证,以避免非法设施的接入。在证书的应用形式上,有一型一密、一机一密等不同的计划,其中一机一密计划事后为每一个设施端设置惟一的设施证书,设施端与服务端通信时可能进行双向验证,验证通过后,设施端与服务端才进行失常的数据传输。相比于其余计划,一机一密可能做到针对每个设施的独自验证与受权,具备更高的安全性。

作为安全可靠的全托管 MQTT 音讯云服务,EMQX Cloud 反对多种认证形式,包含根底认证(用户名 / 明码,客户端 ID/ 明码)及 JWT、PSK 和 X.509 证书认证,同时可配置内部数据库作为数据源验证认证信息。

本文将采纳 Redis 作为认证数据源存储数据库,解说如何通过设施端证书中蕴含的 Common Name 为验证信息,连贯到 EMQX Cloud,实现客户端一机一密验证。若客户端证书中不带有指定惟一的 Common Name,则无奈通过认证。

通过本文,读者能够为其物联网设施实现一机一密、设施与服务器双向身份认证和建设平安通道的能力,无效避免伪造设施攻打、设施密钥被破解、伪造服务器指令、监听或篡改要害信息、通过设施产线安全漏洞窃取密钥等攻打伎俩。

操作流程

一、配置 TLS/SSL 双向认证

1、筹备工作

  1. 购买服务器证书,并将其域名解析到部署连贯地址。

  2. 生成客户端 root ca 自签名证书,应用自签名 root ca 证书签发客户端证书需确保 Common Name 惟一。

    # CA 证书生成 client-ca.crt,subj 根据理论应用状况调整。openssl req \
        -new \
        -newkey rsa:2048 \
        -days 365 \
        -nodes \
        -x509 \
        -subj "/C=Common Name/O=EMQ Technologies Co., Ltd/Common Name=EMQ CA" \
        -keyout client-ca.key \
        -out client-ca.crt
    
    # 客户端秘钥生成 client.key
    openssl genrsa -out client.key 2048
    
    # 生成客户端证书申请文件 client.csr,Common Name 为客户端携带认证信息
    openssl req -new -key client.key -out client.csr -subj "/Common Name=346a004d-1dab-4016-bb38-03cca7094415"
    
    # 用 CA 证书给客户端证书签名,生成 client.crt
    openssl x509 -req -days 365 -sha256 -in client.csr -CA client-ca.crt -CAkey client-ca.key -CAcreateserial -out client.crt
    
    # 查看客户端端证书信息
    openssl x509 -noout -text -in client.crt
    
    # 验证证书
    openssl verify -CAfile client-ca.crt client.crt

2、配置流程

登录 EMQX Cloud 控制台。进入部署详情,点击 +TLS/SSL 配置按钮,配置证书内容,您能够上传文件或者间接填写证书内容 TLS/SSL 认证类型:

① 单向认证:仅客户端验证服务端证书。

② 双向认证:客户端和服务端互相验证证书。

在本示例文档中咱们以 双向认证 为例,在部署控制台填入以下内容:

① 公钥证书:服务端证书

② 证书链:证书链,通常第三方机构签发证书时会提供

③ 私钥:公有秘钥

④ 客户端 CA 证书:抉择双向认证时,须要提供客户端的 CA 证书

填写实现后,点击确定,直至状态为运行中,即 TLS/SSL 双向认证配置实现。

二、配置 Redis 认证 / 访问控制

本文以 Redis 认证 / 访问控制为例,当然您也能够应用其余内部认证数据源,在本文所述场景中,比拟举荐应用 Redis 认证 / 访问控制。

1、创立 VPC 对等连贯

在 EMQX Cloud 部署详情页面,创立 VPC 对等连贯,便于专业版部署内网拜访到您方 Redis 认证数据库。

2、配置 Redis 认证 / 访问控制

  1. redis 配置

    在你的云服务器中,创立一个 Redis 服务。为了不便演示,这里应用 Docker 疾速搭建。

    docker run -itd --name redis -p 6379:6379 redis:latest

    本示例配置数据有如下两种形式(二选一):

    HMSET  tls_domain:346a004d-1dab-4016-bb38-03cca7094415 password pubic
    HMSET  tls_subject:346a004d-1dab-4016-bb38-03cca7094415 password pubic

  2. Redis 认证 / 访问控制配置

    进行身份认证时,EMQX Cloud 将应用以后客户端信息填充并执行用户配置的认证查问命令,查问出该客户端在 Redis 中的认证数据。

    能够在认证 SQL 中应用以下占位符,执行时 EMQX Cloud 将主动填充为客户端信息::

    • %u:用户名
    • %c:客户端 ID
    • %C:TLS 证书专用名(证书的域名或子域名),仅当 TLS 连贯时无效
    • %d:TLS 证书 subject,仅当 TLS 连贯时无效

    你能够依据业务须要调整认证查问命令,应用任意 Redis 反对的命令 (opens new window),然而任何状况下认证查问命令须要满足以下条件:

    ① 查问后果中第一个数据必须为 password,EMQX 应用该字段与客户端明码比对

    ② 如果启用了加盐配置,查问后果中第二个数据必须是 salt 字段,EMQX 应用该字段作为 salt(盐)值

    在部署中点击认证鉴权 – 内部认证受权 – Redis 认证 / 访问控制,点击配置认证,即可新建认证。

    认证查问命令有如下两种形式:

    HMGET tls_domain:%C password
    HMGET tls_subject:%d password

    即设施需携带客户端证书、客户端秘钥和其 Common Name、password 的形式进行身份验证。

测试验证

咱们应用 MQTT X 模仿客户端携带以下信息连贯到 EMQX Cloud。

① 服务端 CA

② Common Name 为 346a004d-1dab-4016-bb38-03cca7094415 的客户端证书、客户端秘钥

③ password:public

点击 右上角 connect,呈现 connected 示意已连贯胜利。至此,带有指定 common name 的设施已胜利连贯至 EMQX Cloud,即一机一密设施通过验证并连贯至 EMQX Cloud 已胜利。

结语

至此咱们实现了 EMQX Cloud 的客户端一机一证书验证流程,胜利连贯到部署。相比于其余计划,一机一密可能做到针对每个设施的独自验证与受权,具备更高的安全性,若您也为您的每一个物联网设施设置了惟一的拜访凭证,能够参考本文进行配置。

版权申明:本文为 EMQ 原创,转载请注明出处。

原文链接:https://www.emqx.com/zh/blog/one-device-one-secret-authentication-for-iot-devices-with-emqx-cloud

退出移动版